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 |
Edited by jwlato