我已经断断续续地使用Haskell数年了;我对单子是如何工作的,以及如何使用它们,以及操作符(=<<)
和(>>=)
做什么感到非常舒适。
但我仍然不知道如何“谈论”它们!有没有什么标准术语来描述它们所做的事情-将箭头a -> m b
变换成箭头m a -> m b
的动作?
(作为一个数学家,我想到的一个选择是“Kleisli类别中的遗忘函子”。但是Haskell大师们肯定有更简洁的术语,因为在Haskell中,这个操作被用作单子的构建块之一,而在数学环境中,它通常被认为是一个衍生操作,从乘法和函子性定义而来!)
>>=
运算符时,Wadler在他的论文《函数式编程的本质》中使用了术语“bind”,这个术语是>>=
的通用术语(不确定该术语在此之前是否被使用过)。请注意,我已经将原文中提到的英文术语"bind"翻译成了中文。 - Mark Hjoin
而非>>=
开始。但是,在大多数实际应用中,“绑定”更加方便。 - leftaroundabout