阅读本文后,我了解到>=>
(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)
? - 我们能从这些法则中推导出一元法则吗?这些定律和一元定律等效吗?