Newtype deriving doesn't work with type families
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 (closed). I wonder if the deriving clause could generate something like:
instance T Int ~ T N => C Int