作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经断断续续地使用 Haskell 好几年了;我对 monad 的工作方式、使用方式以及运算符的含义非常满意 (=<<)
和(>>=)
做。
但我仍然不知道如何谈论它们!是否有任何标准术语来描述他们所做的事情——改变箭头的 Action a -> m b
成箭头m a -> m b
?
(作为一名数学家出身,脑海中浮现的一个选项是“来自 Kleisli 范畴的健忘仿函数”。但是 Haskell 大师肯定有一些更简洁的术语,因为在 Haskell 中,此操作被用作单子(monad)的构建 block ,与数学设置不同,在数学设置中,它通常被视为派生运算,由乘法和函数性定义!)
最佳答案
>>=
的正式名称是bind。我们也可以将其理解为“feed through”、“process by”等。Brian Benkman from MSDN's Channel 9称之为“推”(向右或向左)。
为什么要绑定(bind)?与let
类比。正如 let
将其变量绑定(bind)到初始表达式求值的结果一样,“monadic let”会将其变量“绑定(bind)”到其输入计算的结果:
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 ->
.... .... ))
正如您所看到的,这是从完全非数学的实际角度出发的。
关于Haskell 单子(monad) : What is the name for what `(>>=)` and `(=<<)` do?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20730518/
我是一名优秀的程序员,十分优秀!