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.
<details><summary>Trac metadata</summary>
| 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 | |
</details>
<!-- {"blocked_by":[],"summary":"data families with representational matching","status":"New","operating_system":"","component":"Compiler","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"7.8.2","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"FeatureRequest","description":"Since ghc-7.8, the following is no longer possible:\r\n\r\n{{{\r\n-- simplified example taken from the vector package\r\nclass MVectorClass (v :: * -> * -> *) a where\r\n basicLength :: v s a -> Int\r\n\r\ndata family MVector s a\r\n\r\ndata instance MVector s Int -- implementation not important\r\n\r\nnewtype Age = Age Int deriving (MVectorClass MVector) -- rejected\r\n}}}\r\n\r\nFollowing 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.\r\n\r\nThis has broken some code that previously worked, however as there are some workarounds I'm not sure how important it is.","type_of_failure":"OtherFailure","blocking":[]} -->
issue