[GHC] #12911: Levity polymorphism check eliminates non-levity-polymorphic data constructor

GHC ghc-devs at haskell.org
Fri Dec 2 20:07:45 UTC 2016


#12911: Levity polymorphism check eliminates non-levity-polymorphic data
constructor
-------------------------------------+-------------------------------------
        Reporter:  goldfire          |                Owner:
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.0.1
      Resolution:                    |             Keywords:
                                     |  LevityPolymorphism
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by josef):

 I think I hit upon this restriction when trying to implement some of the
 code from the levity polymorphism paper. The section on levity polymorphic
 type classes explains how the dictionary from levity polymorphic Num is
 perfectly safe.

 {{{
 data Num (a :: TYPE r)
  = MkNum {(+) :: a → a → a, abs :: a → a}
 }}}

 But sadly GHC rejects the data type declaration above.

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


More information about the ghc-tickets mailing list