support for deriving Vector/MVector instances
Since ghc-7.8, the following is no longer possible:
-- simplified example taken from the vector package class MVectorClass (v :: * -> * -> *) a where basicLength :: v s a -> Int data family MVector s a data instance MVector s Int -- implementation not important newtype Age = Age Int deriving (MVectorClass MVector) -- rejected
Following from discussion in #8177, to enable this ghc would need to support data families with representational matching, such that
MVector s Int and
MVector s Age are representationally equal.
This has broken some code that previously worked, however as there are some workarounds I'm not sure how important it is.