这个功能产生了什么

use*_*699 2 haskell

表达式的类型和值是什么:

do [1,2,3]; "lambda"
Run Code Online (Sandbox Code Playgroud)

我测试了它,发现它只打印lambda 3次.但我不明白为什么会那样做.我怎么能用bind重写它.感觉有必要重写它.

awe*_*oon 6

你的代码和

[1, 2, 3] >> "lambda"
Run Code Online (Sandbox Code Playgroud)

>> 被定义为

m >> n = m >>= \_ -> n
Run Code Online (Sandbox Code Playgroud)

并且>>=运算符被定义为列表:

xs >>= f = concat (map f xs)
Run Code Online (Sandbox Code Playgroud)

因此,您的代码可能会被翻译成:

concat $ map (const "lambda") [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

这产生了结果

"lambdalambdalambda"
Run Code Online (Sandbox Code Playgroud)