monads - Haskell: 'do [1,2,3]; ["hello"]' behavior clarification -
so i'm trying understand how haskell do notation works. understand used monads , expands (since it's syntactic sugar) anonymous functions connected either bind (>>=) or (>>) shown here https://en.wikibooks.org/wiki/haskell/syntactic_sugar#do_notation.
however my question is why following command
prelude> [1, 2, 3]; "hello" returns
"hellohellohello" i know arrays monads (and strings arrays of chars) fail see how results in behavior above.
do [1, 2, 3]; "hello" desugars to
[1, 2, 3] >> "hello" which same
[1, 2, 3] >>= (\_ -> "hello") which same as
concatmap (\_ -> "hello") [1, 2, 3] which same as
concat (map (\_ -> "hello") [1, 2, 3]) which same as
concat [(\_ -> "hello") 1, (\_ -> "hello") 2, (\_ -> "hello") 3]) which same as
concat ["hello","hello","hello"] which same as
"hellohellohello"
Comments
Post a Comment