【发布时间】:2020-03-17 16:35:33
【问题描述】:
我无法理解 Dot(函数组合)和 bind (>>=) 之间的区别。
如果我理解的话,这两种方式将函数的先前结果作为新函数。
那么有什么区别呢?
【问题讨论】:
-
(.)是一个适用于函数类型的运算符,而(>>=)是一个重载运算符。它适用于作为 Monad 类型类实例的所有类型,包括函数类型(->) r。即使使用函数类型,它们也不完全相同。不过我建议你先检查fmap和(.)。 -
粗略地说,
(.)构成a -> b和b -> c,而>>=排序适用M b到b -> M c。类型完全不同,尤其是因为 monadM。 -
另一方面,
(.)和(<=<)(“kleisli 组合”)非常相似,它们之间的差异/类比值得思考 -
@luqui 确实如此,
Category类统一了“可以组合的事物”的一般概念。 (而Arrow及其子类更进一步。)(注意我提到这些以防 OP 感兴趣,而不是因为我认为你不知道它们 :-))
标签: haskell bind composition