Deriving Generic1 interacts poorly with TypeInType
From @RyanGlScott, ticket:11357#comment:117922:
Vanilla datatypes and data family instances are still inconsistent w.r.t. which type variables are considered "instantiated" in a Generic1
instance. For instance, this is rejected:
λ> data Proxy k (a :: k) = ProxyCon deriving Generic1
<interactive>:32:43: error:
• Can't make a derived instance of ‘Generic1 (Proxy *)’:
Proxy must not be instantiated; try deriving `Proxy k a' instead
• In the data declaration for ‘Proxy’
And rightfully so, since the visible kind binder k
is instantiated to *
. But now it's possible to have an equivalent instance for a data family that squeaks past this check!
λ> data family ProxyFam (a :: y) (b :: z)
λ> data instance ProxyFam k (a :: k) = ProxyFamCon deriving Generic1
==================== Derived instances ====================
Derived instances:
instance GHC.Generics.Generic1 (Ghci13.ProxyFam *) where
...
[Ryan needs] to investigate further to see why this is the case.
Trac metadata
Trac field | Value |
---|---|
Version | 8.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |