gpt4 book ai didi

haskell ->>= return ...这是怎么回事?

转载 作者:行者123 更新时间:2023-12-02 17:37:37 26 4
gpt4 key购买 nike

我正在阅读 exercism.io 上的一篇提交内容,其中有人建议

concat (replicate n str)

也可以表示为:

[1..n] >>= return str

无需深入讨论此主题随后发生的所有争论:我正在寻找完全外行人的解释,解释其为何/如何工作。

特别是,在尝试在我的脑海中重新塑造它之后,我认为它可能有点类似于:

fmap (return char) [1..3]

但我不明白的是为什么

[1..n] >>= return 'M'

是一个错误,其中

[1..n] >>= return "M"

很好。

任何真正熟悉 Haskell 的人都可以告诉我这一切是如何工作的吗?

最佳答案

[1..n] >>= return str

这里 return 来自函数 monad ((->) a),所以上面等价于

[1..n] >>= const str

其中const是一个忽略其参数并始终返回 str 的函数,>>= 是列表 monad 的绑定(bind)运算符,与 concatMap 相同所以我们得到

concatMap (const str) [1..n]

本质上是用 str 替换每个列表元素,然后将它们连接起来。

至于为什么 [1..n] >>= return 'M' 是一个错误:它简化为 concatMap (const 'M') [1..n]concatMap 的参数必须返回一个列表,并且 'M' 不是列表,而 "M" (相当于到['M'])是。

关于haskell ->>= return ...这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19958897/

26 4 0