
#7688: :kind should do kind generalisation ---------------------------------+------------------------------------------ Reporter: simonpj | Owner: Type: bug | Status: new Priority: normal | Milestone: 7.8.1 Component: Compiler | Version: 7.6.2 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: None/Unknown Difficulty: Unknown | Testcase: Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ 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 -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7688 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler