
#10775: Enable PolyKinds in GHC.Generics -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: Type: feature request | Status: new Priority: normal | Milestone: Component: libraries/base | Version: 7.10.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by RyanGlScott):
To make `Generic1 :: k -> *` instead of its current `Generic1 :: * -> *` kind?
No, my main motivation involves `Proxy` from `Data.Proxy`. Currently, `Proxy` is defined like so: {{{#!hs data Proxy (t :: k) = Proxy }}} using `PolyKinds`, but `Proxy` has a `Generic` instance defined in `GHC.Generics`, a module which doesn't have `PolyKinds` enabled. As a result, the resulting `Generic` instance is {{{#!hs instance Generic (Proxy (t :: *)) }}} This prevents you from using certain `Proxy` values with generic functions: {{{ $ ghci -XPolyKinds GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help λ> import GHC.Generics λ> import Data.Proxy λ> from (Proxy :: Proxy Int) M1 {unM1 = M1 {unM1 = U1}} λ> from (Proxy :: Proxy Maybe) <interactive>:5:1: No instance for (Generic (Proxy Maybe)) (maybe you haven't applied enough arguments to a function?) arising from a use of ‘from’ In the expression: from (Proxy :: Proxy Maybe) In an equation for ‘it’: it = from (Proxy :: Proxy Maybe) }}} If `GHC.Generics` enabled `PolyKinds`, that would fix this issue. It would also make many data types in `GHC.Generics` poly-kinded as well, as an added bonus. (I had originally thought `Generic1`/`Rep1` could be poly-kinded, but upon further thought, I think the current GHC generics mechanism assumes that the last type parameter is always of kind `* -> *`.) -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10775#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler