#5744: List layouts
------------------------------+---------------------------------------------
 Reporter:  nsch              |          Owner:  nsch            
     Type:  feature request   |         Status:  new             
 Priority:  normal            |      Component:  Compiler        
  Version:  7.2.1             |       Keywords:                  
       Os:  Unknown/Multiple  |   Architecture:  Unknown/Multiple
  Failure:  None/Unknown      |       Testcase:                  
Blockedby:                    |       Blocking:                  
  Related:                    |  
------------------------------+---------------------------------------------
 Hi!

 I want to propose a new GHC extension called ListLayouts. It's basically a
 do-notation for pure lists and was initially meant to offer an alternative
 to the current do-notation monad "exploits" as seen in libraries like e.g.
 blaze-html, but it is of course a lot more general.

 What it'd look like in practice shows this little example:


 {{{
 {-# LANGUAGE ListLayouts #-}

 import Data.Monoid

 main :: IO ()
 main = mapM_ putStrLn $++
   "These are list layouts."
   "Let me know what you think. :)"

 allFalse :: All
 allFalse = mconcat $++
   All True
   let f = All True
       t = All False
   t
   f
 }}}

 This simply translates to `(a : let b = c in (d : ... ))` etc. I already
 started working on this extension and the above example already works:

 {{{
 ยป [email protected]. ../inplace/bin/ghc-stage2 LISTLAYOUT-TEST.hs
 --interactive
 GHCi, version 7.5.20111229: http://www.haskell.org/ghc/  :? for help
 Loading package ghc-prim ... linking ... done.
 Loading package integer-gmp ... linking ... done.
 Loading package base ... linking ... done.
 [1 of 1] Compiling Main             ( LISTLAYOUT-TEST.hs, interpreted )
 Ok, modules loaded: Main.
 *Main> allFalse
 All {getAll = False}
 *Main> :main
 These are list layouts.
 Let me know what you think. :)
 *Main>
 }}}

 ListLayouts currently support two statements, regular expressions (i.e.
 list elements) and `let` bindings. It could be thought to add the `..`
 notation thing and maybe even comprehension notations, e.g.:

 {{{
 ex = $++
   1
   2..5
   x  | x <- [6..], x <= 10
   11 | False
 }}}

 This should result in the list `[1,2,3,4,5,6,7,8,9,10]`. Adding these
 features to the current existing code should be pretty much straight
 forward.

 In my opinion this extension would fit in nicely, as it is kind of the
 ''counterpart'' to monad comprehensions (which practically add list
 notation to monads). It shouldn't be necessary to make it any more general
 (e.g. use monoids, semigroups or any other, potentially new, type class
 instead of lists) since almost every list-like datatype has it's own
 `fromList` function (`Data.Map.fromList`, `Data.Set.fromList`,
 `Data.Monoid.mconcat` etc.) and using functions instead of class instances
 is a lot more convenient in most cases, too.

 So please let me know what you think about this idea and whether or not
 you would be willing to add this extension to GHC. I would, of course, be
 willing to do all the coding.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5744>
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