そういえば昨夜ふと思ったのだが、 Haskell における List の内包表記というのは do 記法で代替できる?
たとえば、
[ (x, y) | x <- [1..10], mod x 2 == 0, y <- [1..10], mod y 2 == 0 ]
は、
do { x <- [1..10]; guard $ mod x 2 == 0; y <- [1..10]; guard $ mod y 2 == 0; return (x, y) }
と同等。
一般に、