看完这篇article我了解 >=>
(Kleisli 箭头)只是组合函数的高阶函数,它返回“一元值”。例如:
val f: A => M[B] = ...
val g: B => M[C] = ...
val h: A => M[C] = f >=> g//用 Kleisli 箭头组合 f 和 g
它看起来像是“简单”函数的简单组合(即返回简单值的纯函数):
val f: A => B = ...
val g: B => C = ...
val h = f 然后 g;//合成 f 和 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)
? 最佳答案
你在这里看到的是这个结构的直接结果是 category .
unit
是这样称呼的:它是由克莱斯利箭组成的单位。 (f <=< g) x = f =<< (g x)
(其中 <=<
是 andThen
,而 =<<
可能类似于 Scala 中的 flip(bind)
)。推导的确切步骤可以找到here . 关于scala - 函数组合、Kleisli 箭头和一元定律,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21499849/