[GHC] #7495: generalizing overloaded list syntax to Sized Lists, HLists, HRecords, etc

GHC ghc-devs at haskell.org
Thu Jun 11 06:56:15 UTC 2015


#7495: generalizing overloaded list syntax to Sized Lists, HLists, HRecords, etc
-------------------------------------+-------------------------------------
        Reporter:  nwf               |                   Owner:  carter
            Type:  feature request   |                  Status:  new
        Priority:  normal            |               Milestone:  7.12.1
       Component:  Compiler          |                 Version:  7.6.1
      Resolution:                    |                Keywords:
Operating System:  Unknown/Multiple  |            Architecture:
 Type of failure:  None/Unknown      |  Unknown/Multiple
      Blocked By:                    |               Test Case:
 Related Tickets:  #9883             |                Blocking:  9883
                                     |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by s9gf4ult):

 * Pattern matching: I believe  we should not put pattern matching into
 `OverloadedLists` and stay with just list construction. It looks like
 implementation of generic list construction is simpler than generic
 pattern matching. The usability of list construction is higher because
 things like

 {{{#!hs
 [ OneTypeConstructor
 , OtherTypeConstructor
 , "string"
 ]
 }}}

 looks more clean and simple to write than

 {{{#!hs
 HCons OneTypeConstructor   $
 HCons OtherTypeConstructor $
 HCons "string" HNil
 }}}

 but when you pattern match some list you probably expect some concrete
 list type, not just some list (heterogeneous or homogeneous) with some
 elements.

 Maybe add separate `OverloadedListPatterns` extension instead?

 * About `[a,b..c]`: There should nothing changed for homogeneous lists,
 but heterogeneous lists can not be constructed dynamically, especially
 lists like `[1..]`. Maybe it would be nice to make sugar `[a,b..f]` unwrap
 to

 {{{#!hs
 HCons a $
 HCons b $
 HCons c $
 HCons e $
 HCons f HNil
 }}}

 but it is not an option for homogeneous lists, especially lists like
 `[1,2..10000000]`.

 Maybe special syntax like `[1,2...5]` (three dots) for constructing
 heterogeneous lists at compile time?

 * I don't see any things which current `OverloadedLists` can do and this
 new can not. Maybe some issues with type inference ...

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/7495#comment:15>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list