
On 7 October 2010 12:04, Sebastiaan Visser
What exactly are the benefits of Monad comprehensions over, for example, the do-notation or idioms?
List comprehensions are just a specialisation of the do-notation for lists. Monad comprehensions are a generalisation for arbitrary monads of this specialisation :-) I don't think there are major benefits to this. The major change is that they "look like" lists (which might be important if you are writing a SQL library) and the final "return" is hoisted into the head of the comprehension [HERE | with, the, usual, do, notation, sequence, here].
I'm not fully aware of what Monad comprehensions would offer in general, but aren't most comprehensions directly translatable to applicative style?
Monadic style, not applicative style.
For example:
[(x, y) | x <- xs | y <- ys] -- Comprehension.
This computes a zip of xs and ys.
(,) <$> xs <*> ys -- Applicative style.
This actually computes a cartesian product instead. You are right in spirit because: [e | qs] ==> do { qs; return e } For example: [(x, y) | x <- xs, y <- ys] ==> do { x <- xs; y <- ys; return (x, y) } Cheers, Max