
#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): Also, Richard pointed out in IRC that the TyCon representations that I produce in my current implementation are too weakly typed and would mean that we #10000 (also #9858) would remain (at least if we allowed something like `TyCon -> TypeRep`, which the current `Typeable` does not). To fix this, we need to make the user provide type representations for the concrete kinds he wishes to instantiate at before giving him a representation. For instance, `Proxy`'s representation would look like, {{{#!hs data TyCon a proxyTyCon :: TypeRep k -> TyCon (Proxy :: k -> *) proxyTyCon = ... }}} However, this makes an already complex story even more complex. Even worse, it will make all module with type definitions pay even more in both compilation time and code size due to the lambdas. `TyCon`s are currently nice pure records with quite efficient representations. It would be nice to retain this property. In light of this, perhaps it would be reasonable to consider an alternative: == An alternative: TyCon entirely == An appealing alternative here would be to remove `TyCon` from the user- facing interface entirely. This would mean that it can remain unindexed, `TyCon` is already more-or-less an implementation detail and I can't think of any reason why a `TypeRep` wouldn't do. Removing `TyCon` from the interface would be a substantial simplification to the scheme and neither Richard nor I could think of any reason why it is strictly necessary. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11011#comment:11 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler