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

PLL*_*PLL 9 monads haskell

我已经和Haskell一起玩了好几年了; 我对monad如何工作,如何使用它们以及操作员(=<<)(>>=)做什么感到很满意.

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

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

Wil*_*ess 9

正式名称>>=是bind.我们还可以将其视为"直通","处理方式"等.来自MSDN频道9的Brian Benkman将其称为"推"(向右或向左).

为何绑定?通过类比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 ->
   ....                    .... ))
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这是完全非数学的,实用的观点.