阅读此article后,我了解到>=>
( Kleisli arrow )只是一个组合函数的高阶函数,它返回“monadic values”。例如:
val f: A => M[B] = ... val g: B => M[C] = ... val h: A => M[C] = f >=> g // compose f and g with Kleisli arrow
它看起来像是一个简单的“简单”函数组合(即返回简单值的纯函数):
val f: A => B = ... val g: B => C = ... val h = f andThen g; // compose f and g
现在我猜这个“简单”的作文andThen
符合某些法律
f andThen g == g
和g andThen f == g
身份功能:f[A](a:A):A = a
(f1 andThen f2) andThen f3
== f1 andThen (f2 andThen f3)
现在我的问题是:
>=>
是否符合那些身份为f(a:A) = M[a].unit(a)
的法律?答案 0 :(得分:11)
你所拥有的是这种结构的直接结果是category。
unit
被调用的原因:它是Kleisli箭头组成的单位。(f <=< g) x = f =<< (g x)
(其中<=<
为andThen
,=<<
可能类似于Scala中的flip(bind)
。可以找到推导的确切步骤here。