
#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