id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,os,architecture,failure,difficulty,testcase,blockedby,blocking,related
2721,Newtype deriving doesn't work with type families,rl,,"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
}}}

",feature request,new,lowest,7.6.2,Compiler,6.10.1,,,tom.schrijvers@… illissius@… acfoltzer@…,Unknown/Multiple,Unknown/Multiple,None/Unknown,Unknown,deriving/should_fail/T2721,,,
