
On 04/07/2014 04:33 AM, John M. Dlugosz wrote:
I know about List Comprehensions, but what is a general Monad Comprehension? List Comprehensions are the use of set-builder notation to define a list, so I don't understand how that would generalize.
The set-builder notation to find the sums of elements from two lists looks like, list_sums = [ x + y | x <- [1,2,3], y <- [4,5,6] ] The way the list monad is defined, this is the same thing as, list_sums = do x <- [1, 2, 3] y <- [4, 5, 6] return (x + y) The set-builder notation is not obviously generalizable, but once you desugar it to do-notation, it's more clear that you could do the same thing with any monad. What actually happens might not be intuitive, but the desugaring will work at least. For the Maybe monad, you could do something like, maybe_sums = [ x + y | x <- Just 1, y <- Just 2 ] which will be desugared into, maybe_sums = do x <- Just 1 y <- Just 2 return (x + y) Any other monad will work the same.