これは私の前の質問のフォローアップです
Kleisli
<=<
(compose) と>=>
(andThen)の 2 つの演算子を定義します。私にとっては非常に自然に見えますが、どのように役立つ>=>
かわかりません。<=<
>=>
また、半群がないように見えますA => M[A]
が、<=<
半群は存在します。
その背後にある理論的根拠は何ですか?
これは私の前の質問のフォローアップです
Kleisli
<=<
(compose) と>=>
(andThen)の 2 つの演算子を定義します。私にとっては非常に自然に見えますが、どのように役立つ>=>
かわかりません。<=<
>=>
また、半群がないように見えますA => M[A]
が、<=<
半群は存在します。
その背後にある理論的根拠は何ですか?
compose
(または<=<
) は、ポイントフリー スタイルとポイントフリー スタイルの間で変換する場合、もう少し自然です。たとえば、次の関数があるとします。
val f: Int => Int = _ + 1
val g: Int => Int = _ * 10
次の同等性が得られます。
scala> (f andThen g)(3) == g(f(3))
res0: Boolean = true
scala> (f compose g)(3) == f(g(3))
res1: Boolean = true
このcompose
場合、f
とg
は方程式の両側で同じ順序になります。
残念ながら、Scala の型推論はしばしばandThen
(または>=>
) より便利になり、より広く使用される傾向がありますcompose
。したがって、これは数学的規則と Scala の型推論システムの癖が対立するケースです。Scalaz は (プロジェクトの文化を考えるとそれほど驚くことではありませんが) 数学側を選択します。