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.
Trac metadata
Trac field | Value |
---|---|
Version | 7.8.2 |
Type | FeatureRequest |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |