Bringing back Monad Comprehensions (in style)

Sebastiaan Visser haskell at fvisser.nl
Thu Oct 7 07:04:57 EDT 2010


What exactly are the benefits of Monad comprehensions over, for example, the do-notation or idioms?

I'm not fully aware of what Monad comprehensions would offer in general, but aren't most comprehensions directly translatable to applicative style?

For example:

 [(x, y) | x <- xs | y <- ys]  -- Comprehension.

   versus

 (,) <$> xs <*> ys             -- Applicative style.

   or

 (| (,) xs ys |)               -- Idiom brackets in She.

Or am I missing some subtle points here?

Cheers,
Sebastiaan

On Oct 5, 2010, at 4:41 PM, George Giorgidze wrote:
> Bringing back Monad Comprehensions (in style).
> 
> Dear GHC users,
> 
> My colleagues and I are working on Haskell embedded DSL for data-intensive and
> data-parallel applications [1]. The idea is to provide the Haskell list
> prelude combinators to manipulate database-resident data. The combinators are
> not executed in Haskell runtime, instead they are compiled down to SQL,
> executed on relational database systems and the results are marshalled back to
> Haskell for further in-heap processing or generation of new database-able
> embedded programs.
> 
> Although programming with the standard list processing combinators is
> feasible, the embedded programs are much more concisely formulated using the
> list comprehension notation, especially, when extended with 'order by' and
> 'group by' constructs [2].
> 
> Unfortunately, in Haskell, the list comprehension notation is only available
> for processing lists.
> 
> In order to support the list comprehension notation, we have built a
> quasiquter that desugars the list comprehension notation, but, instead of
> generating code using the Haskell list prelude combinators the quasiquter
> generates code that uses list processing combinators from our embedded
> language.
> 
> Although the quasiquoting approach worked for us, it has a number of
> drawbacks:
> 
>  * Introduces extra syntactic noise
> 
>  * Error messages are hard to understand as they refer to generated code
> 
>  * Needs to be re-implemented for every list-based embedded language
> 
> One way to address the aforementioned drawbacks is to define our queries as a
> monad (similar to list monad) and use the monad comprehension notation. The do
> notation can be used but it is less suited for query languages.
> 
> Unfortunately monad comprehensions were removed from Haskell, prior to Haskell
> 98. However, I think that the notation is extremely useful not only for lists,
> but for other list like data structures, list-based query languages (see
> above), maybe even for wider range of EDSLs and monads. I think the feature
> deserves to be supported at least as a GHC language extension.
> 
> Thus, I would like to propose to design and implement the monad comprehension
> notation as a GHC language extension. I am willing to invest some time and
> contribute to this effort.
> 
> One can also look at how recently introduced 'order by' and 'group by'
> constructs generalise to monad comprehensions. If that works, one could
> implement even more "stylish" monad comprehension notation.
> 
> Feedback from GHC users and developers would be very much appreciated.
> 
>  * Do you think that this is a good idea?
> 
>  * Would you use monad comprehensions (if available) for your
>    library/EDSL/application?
> 
>  * Do you think that it would be hard to integrate this extension into
>    current GHC codebase?
> 
>  * Have you already thought about how to generalise 'order by' and 'group
>    by' to monad comprehensions?
> 
>  * Have you already thought about how to address the original objections to
>    the monad comprehension notation?
> 
> Cheers, George
> 
> [1] http://www-db.informatik.uni-tuebingen.de/files/weijers/IFL2010complete.pdf
> 
> [2] http://research.microsoft.com/en-us/um/people/simonpj/papers/list-comp/
> 


More information about the Glasgow-haskell-users mailing list