
#9883: Make OverloadedLists more usable by splitting the class interface -------------------------------------+------------------------------------- Reporter: muesli4 | Owner: Type: feature | Status: new request | Milestone: ⊥ Priority: normal | Version: 7.8.3 Component: External | Keywords: overloaded lists, Core | islist Resolution: | Architecture: Unknown/Multiple Operating System: | Difficulty: Moderate (less Unknown/Multiple | than a day) Type of failure: | Blocked By: 7495 None/Unknown | Related Tickets: #7495 Test Case: | Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- Comment (by simonpj): Replying to [comment:6 goldfire]:
Maybe I'm missing something basic, but why do we need classes at all here? I propose we just desugar the list to use some functions in scope, and if they don't type-check, that's the programmer's problem.
What if you wanted to use list syntax for two different types in the same module? You'd need two different `buildList` functions in scope. Aha! Type classes would solve that! What if you wanted to use list syntax for a type constructor that is as- yet abstract. Aha! Type classes can do that too. Maybe you are saying "if you want to use type classes, then just import a module that defines `buildList` in a class". And yes you could do that. But it's not the way ordinary list syntax or list comprehensions or monad do-notation work. There they desugar to some ''specific'' functions; and you use `-XRebindableSyntax` if you want instead to use "whatever is in scope". `-XOverloadedLists` works in a way consistent with that approach. Simon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9883#comment:10 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler