我已经和Haskell一起玩了好几年了;我对monad的工作原理以及如何使用它们以及运算符(=<<)
和(>>=)
的作用感到非常满意。
但我仍然不知道如何谈论关于他们!对于他们的工作是否有任何标准术语 - 将箭头a -> m b
转换为箭头m a -> m b
的操作?
(作为背景的数学家,脑海中浮现的一个选项是“来自Kleisli类别的遗忘函子”。但是Haskell大师肯定会有一些更简洁的术语,因为在Haskell中,这个操作被用作其中一个monads的构建块,与通常被认为是派生操作的数学设置不同,从乘法和functoriality定义!)
答案 0 :(得分:9)
>>=
的正式名称是bind。我们也可以将其视为“通过”,“处理依据”等。Brian Benkman from MSDN's Channel 9将其称为“推”(向右或向左)。
为什么绑定?与let
类比。就像let
将其变量绑定到评估初始表达式的结果一样,“monadic let”会将其变量“绑定”到其输入计算的结果中:
let a = .... or: .... $>> (\ a -> -- non-recursive "let", as in Lisp,
b = .... .... $>> (\ b -> -- (Haskell's is Lisp's "letrec")
in .... .... )) where x $>> f = f x
do a <- .... or: .... >>= (\ a ->
b <- .... .... >>= (\ b ->
.... .... ))
正如您所看到的,从完全非数学的,实用的角度来看。