#2721: Newtype deriving doesn't work with type families
---------------------------------+------------------------------------------
    Reporter:  rl                |       Owner:                  
        Type:  bug               |      Status:  new             
    Priority:  normal            |   Component:  Compiler        
     Version:  6.10.1            |    Severity:  normal          
    Keywords:                    |    Testcase:                  
Architecture:  Unknown/Multiple  |          Os:  Unknown/Multiple
---------------------------------+------------------------------------------
 This assumes `-XTypeFamiles -XGeneralizedNewtypeDeriving`. Example:
 {{{
 class C a where
   type T a
   foo :: a -> T a

 instance C Int where
   type T Int = Int
   foo = id

 newtype N = N Int deriving(C)
 }}}
 This happily produces an `instance C N` but no `type instance T N`. It
 should either (preferably) generate
 {{{
 type instance T N = Int
 }}}
 or fail. The example also compiles if `T` is a data family (the `Int`
 instance needs to be change accordingly). It should probably fail in this
 case.

 BTW, this also compiles fine, with rather dramatic consequences:
 {{{
 type family T a
 class C a where
   foo :: a -> T a

 type instance T Int = Int
 instance C Int where
   foo = id

 type instance T N = Double
 newtype N = N Int deriving(C)
 }}}
 I guess this last example is the same bug as `#1496`. I wonder if the
 deriving clause could generate something like:
 {{{
 instance T Int ~ T N => C Int
 }}}

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2721>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to