所以我试图准确理解Haskell do
符号是如何工作的.据我所知,它与monad一起使用,它基本上扩展(因为它实际上是语法糖)到与bind(>>=
)或then(>>
)连接的匿名函数,如下所示https://en.wikibooks.org/wiki/Haskell/Syntactic_sugar #Do_notation.
但是我的问题是为什么以下命令
Prelude> do [1, 2, 3]; "hello"
回报
"hellohellohello"
我知道数组实际上是monad(并且这些字符串是字符数组)但是我没有看到它如何导致上面的行为.
do [1, 2, 3]; "hello"
des to to to
[1, 2, 3] >> "hello"
这是一样的
[1, 2, 3] >>= (\_ -> "hello")
这是一样的
concatMap (\_ -> "hello") [1, 2, 3]
这是一样的
concat (map (\_ -> "hello") [1, 2, 3])
这是一样的
concat [(\_ -> "hello") 1, (\_ -> "hello") 2, (\_ -> "hello") 3])
这是一样的
concat ["hello","hello","hello"]
这是一样的
"hellohellohello"