[GHC] #11011: Add type-indexed type representations (`TypeRep a`)
GHC
ghc-devs at haskell.org
Mon Feb 1 12:46:16 UTC 2016
#11011: Add type-indexed type representations (`TypeRep a`)
-------------------------------------+-------------------------------------
Reporter: bjmprice | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version:
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by bgamari):
I have an implementation of this
[[https://github.com/ghc/ghc/compare/master...bgamari:wip/ttypeable|here]].
It's quite rough, there are a variety of interface questions that remain
to be resolved, and I have yet to fix up a few Typeable uses in GHC itself
(e.g. the `Binary` instances) which prevents me from finishing a stage2
build. That being said most of the groundwork has been laid,
* `TTypeRep :: k -> *` has replaced `TypeRep` in the definition of
`Typeable`. The constructors of `TTypeRep` are entirely hidden; there are
pattern synonyms for querying for the applications and type constructors.
* There exists a `TypeRep` which is simply a quantified `TTypeRep`
* We have `tTypeRepKind :: TypeRep (a :: k) -> TypeRep k`
* The solver now preserves enough information to construct these
representations. This took a bit of gymnastics due to the recursive kind
relations of `(->)`, `TYPE`, and `Levity`. These representations are
handled as a bit of a special case. I need to
* The desugarer can produce new `Typeable` dictionaries
* I get much of the way through the stage2 build before failing as I
haven't yet updated the instances in `Binary`.
* `withTypeable` doesn't yet exist
* In order to test things I have lifted the unsaturated-unlifted-
application Core Lint check mentioned above
* `TrTyApp` includes the kind of the application, which I only realized
recently isn't necessary; it can be derived from the kind of the thing
being applied.
There are a number of interface questions that remain:
* do we want to provide the continuation-style queries or only pattern
synonyms?
* what should the typical use-case of serialization look like?
* do we want to provide "paranoid" equality checks which scrutinize the
entire representation, in addition to the constant-time fingerprint-based
checks?
* should the pattern synonyms against `TrTypeRep` provide the kind of the
term in addition to the type constructor/applied types?
* the usual bike-shedding regarding naming has yet to happen
That's pretty much the current state of things after spending the better
part of last weekend on the project. Further progress will likely be slow
until I have time again next weekend.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11011#comment:14>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list