:kind should do kind generalisation
Suppose you load this into GHCi:
{-# LANGUAGE PolyKinds #-}
module Test where
data Proxy (t::k) = Proxy
Now you use :kind
to see the kind of Proxy
:
ghci> :k Proxy
Proxy :: * -> *
It is true that Proxy
has that kind but it has a more polymorphic kind, and that's the one we'd like to see.
The trouble is this. Proxy
really does have a polymorphic kind. However, :kind
takes a type (not a type constructor) as its argument, so you can say
:kind (Maybe Int)
for example. So as usual we instantiate Proxy
with fresh kind variables -- BUT :kind
does not do kind generalisation, so we get a monomorphic instance. (And we default unbound kind variables to *
.
Conclusion: :kind
should do kind-generalisation.
See also #7586 (closed)
Trac metadata
Trac field | Value |
---|---|
Version | 7.6.2 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |