[GHC] #10343: Make Typeable track kind information better
GHC
ghc-devs at haskell.org
Mon Jan 25 10:31:10 UTC 2016
#10343: Make Typeable track kind information better
-------------------------------------+-------------------------------------
Reporter: oerjan | Owner: goldfire
Type: feature request | Status: new
Priority: normal | Milestone: 8.0.1
Component: Compiler | Version: 7.10.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case: typeOf ::
| Typeable (a::k) => Proxy a ->
| TypeRep
Blocked By: | Blocking:
Related Tickets: #9858 | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by bgamari):
My goal was to augment the existing `Typeable` interface with a means of
extracting the kind of the type represented by a given `TypeRep`. That is,
{{{#!hs
-- The current (non-type-indexed) TypeRep machinery
data TypeRep
type KindRep = TypeRep
typeRep :: Typeable a => Proxy a -> TypeRep
-- I wanted this...
typeRepKind :: TypeRep -> KindRep
}}}
As far as I can tell, the semantics of `typeRepKind` should be clear so
long as we are only talking about monomorphically kinded types. For
instance,
{{{#!hs
kindRep :: Typeable a => Proxy a -> KindRep
kindRep = typeRepKind . typeRep
kindRep (Proxy :: Proxy Int) == *
kindRep (Proxy :: Proxy Int#) == TYPE 'Unlifted
kindRep (Proxy :: Proxy '[4]) == '[Nat]
kindRep (Proxy :: Proxy (4 ':)) == '[Nat] -> '[Nat]
kindRep (Proxy :: Proxy []) == * -> *
kindRep (Proxy :: Proxy [Int]) == *
kindRep (Proxy :: Proxy ((->) Int)) == * -> *
kindRep (Proxy :: Proxy Eq) == * -> Constraint
kindRep (Proxy :: Proxy (':)) insoluble
kindRep (Proxy :: Proxy 'Just) insoluble
}}}
I have not thought much about this might fit in to the new type-indexed
`TypeRep`.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10343#comment:26>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list