[GHC] #10343: Make Typeable track kind information better
GHC
ghc-devs at haskell.org
Thu Apr 23 20:17:06 UTC 2015
#10343: Make Typeable track kind information better
-------------------------------------+-------------------------------------
Reporter: oerjan | Owner: goldfire
Type: feature request | Status: new
Priority: normal | Milestone: 7.12.1
Component: Compiler | Version: 7.10.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: None/Unknown | Unknown/Multiple
Blocked By: | Test Case: typeOf ::
Related Tickets: #9858 | Typeable (a::k) => Proxy a ->
| TypeRep
| Blocking:
| Differential Revisions:
-------------------------------------+-------------------------------------
Comment (by simonpj):
Can I make two pleas?
1. Could we cast this discussion in the language of type-indexed type
representations `TTypeRep`, in [wiki:Typeable]? A `TTypeRep a` is very
like `Typeable a`, but has the very great merit of being an ordinary data
value. `Typeable a` is just the implicit version of it. You can get from
one to the other via `tTypeRep`:
{{{
class Typeable a where
tTypeRep :: TTypeRep a
}}}
By using an ordinary data value we get away from talking about classes
or superclasses or solvers or whatnot. Once we know, with forensic
precision, what `TTypeable a` should do, then we can think about how the
solver might generate `Typeable a` dictionaries, which are simply
containers for a `TTypeable a` value.
2. Can we keep `TTypeRep` abstract, so instead of talking about what it
"contains" we speak entirely in terms of what functions are available over
it? `decomposeFun` is one such function. Now, for `kindRep` I think you
are asking for a function
{{{
kindRep :: forall (a::k). TTypeRep a -> TTypeRep k
}}}
And indeed it seems plausible that we should provide such a function,
although I have seen no examples whatsoever of why it might be useful.
(Producing a `TypeRep` only to print it does not count; there are easier
ways of producing that sequence of characters.)
I'm afraid I found the summary entirely opaque "The type inference and
runtime representation should support constructing `Typeable (T :: k)`,
even when ``k contains kind variables that are only mentioned in other
`Typeable` constraints not necessarily involving the type constructor `T`.
This will allow simple composition with polymorphic type constructors like
`Proxy` and `Typeable` to work more naturally, but also more complicated
things." What do you mean by "simple composition"? What do you mean by
"more complicated things"?
Don't answer directly: rather, just give a sequence of examples that you
think should work. That will ''show'' me what "simple composition" means,
rather than ''telling'' me!
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10343#comment:13>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list