>>=
来执行此操作,还是可以使用其他功能
一起黑客列表理解的方法?答案 0 :(得分:19)
Section 3.11确切地描述了列表推导的含义,以及如何将它们翻译出去。
如果你想要monad理解,你基本上需要[e]
替换return e
,[]
替换mzero
,concatMap
替换(>>=)
翻译。
答案 1 :(得分:10)
要增加augustss
的答案,如果你有类似的话:
[(x, y) | x <- [1..3], y <- [1..3], x + y == 4]
...它等同于do
符号的使用:
do x <- [1..3]
y <- [1..3]
guard (x + y == 4)
return (x, y)
...相当于concatMap
的使用:
concatMap (\x ->
concatMap (\y ->
if (x + y == 4) then [(x, y)] else []
) [1..3]
) [1..3]