Haskell monads:`(>> =)`和`(=<<<)`的名称是什么?

时间:2013-12-22 14:36:45

标签: haskell monads

我已经和Haskell一起玩了好几年了;我对monad的工作原理以及如何使用它们以及运算符(=<<)(>>=)的作用感到非常满意。

但我仍然不知道如何谈论关于他们!对于他们的工作是否有任何标准术语 - 将箭头a -> m b转换为箭头m a -> m b的操作?

(作为背景的数学家,脑海中浮现的一个选项是“来自Kleisli类别的遗忘函子”。但是Haskell大师肯定会有一些更简洁的术语,因为在Haskell中,这个操作被用作其中一个monads的构建块,与通常被认为是派生操作的数学设置不同,从乘法和functoriality定义!)

1 个答案:

答案 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 ->
   ....                    .... ))

正如您所看到的,从完全非数学的,实用的角度来看。