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