#4370: Bring back monad comprehensions
---------------------------------+------------------------------------------
    Reporter:  simonpj           |        Owner:              
        Type:  bug               |       Status:  new         
    Priority:  normal            |    Milestone:              
   Component:  Compiler          |      Version:  6.12.3      
    Keywords:                    |     Testcase:              
   Blockedby:                    |   Difficulty:              
          Os:  Unknown/Multiple  |     Blocking:              
Architecture:  Unknown/Multiple  |      Failure:  None/Unknown
---------------------------------+------------------------------------------
 George Giorgidze writes: My colleagues and I are working on Haskell [http
 ://www-db.informatik.uni-tuebingen.de/files/weijers/IFL2010complete.pdf
 embedded DSL for data-intensive and data-parallel applications]. 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
 [http://research.microsoft.com/en-us/um/people/simonpj/papers/list-comp/
 'order by' and 'group by' constructs].

 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 enerated 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?

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4370>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to