【发布时间】:2014-01-10 21:40:50
【问题描述】:
我已经断断续续地玩 Haskell 好几年了;我对 monad 的工作方式、使用方法以及操作符 (=<<) 和 (>>=) 所做的工作非常满意。
但我仍然不知道如何谈论他们!是否有任何标准术语来描述他们的工作——将箭头a -> m b 转换为箭头m a -> m b?
(作为一个数学家背景,想到的一个选项是“来自 Kleisli 范畴的健忘函子”。但是 Haskell 大师肯定有一些更简洁的术语,因为在 Haskell 中,这个操作被用作monad 的构建块,不像在数学环境中它通常被认为是派生运算,由乘法和函数定义!)
【问题讨论】:
-
>>=的通用术语是bind,因为这在 Wadler 的 函数式编程的本质 论文中使用,该论文在 Haskell 中介绍了它们(不确定该术语是否在此之前使用过)。 -
啊,非常感谢!如果你这样回答,我会接受的。
-
实际上,随着 Haskell 不断巩固其进行类别理论的方式,有一种趋势是从
join而不是>>=开始。但可以肯定的是,bind 在大多数实际应用中更方便。