gpt4 book ai didi

Haskell 单子(monad) : What is the name for what `(>>=)` and `(=<<)` do?

转载 作者:行者123 更新时间:2023-12-02 05:42:12 29 4
gpt4 key购买 nike

我已经断断续续地使用 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com