[GHC] #10541: Expose kind information for type variables with reify
GHC
ghc-devs at haskell.org
Thu Jun 18 01:11:15 UTC 2015
#10541: Expose kind information for type variables with reify
-------------------------------------+-------------------------------------
Reporter: spinda | Owner:
Type: feature | Status: new
request | Milestone:
Priority: normal | Version: 7.10.1
Component: Template | Operating System: Unknown/Multiple
Haskell | Type of failure: None/Unknown
Keywords: | Blocked By:
Architecture: | Related Tickets:
Unknown/Multiple |
Test Case: |
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
The comment on [https://hackage.haskell.org/package/template-
haskell-2.10.0.0/docs/Language-Haskell-TH-Syntax.html#v:TyVarI TyVarI]
notes that the attached Type is always {{{VarT theName}}}, and that this
could potentially be extended. Currently, there isn't a way to access kind
information for a type variable through the Template Haskell API. It would
be useful (at least for me) to have this ability here.
The limitation on the returned Type comes from the
[https://github.com/ghc/ghc/blob/master/compiler/typecheck/TcSplice.hs#L1060
ATyVar clause of reifyThing], which zonks the TyVar to a GHC type and then
uses reifyType to convert it to a TH type. For a TyVarTy,
[https://github.com/ghc/ghc/blob/master/compiler/typecheck/TcSplice.hs#L1281
reifyType] always returns {{{VarT theName}}}.
I can see a few possible ways of exposing kind information here:
(a) Fill the Type argument to TyVarI with {{{SigT (VarT theName)
theKind}}}. This could be done either as a special case in place of the
call to reifyType in reifyThing, or as a modification to reifyType's
behavior. The question of when SigT should be included is open: all the
time? when the kind isn't {{{*}}}? when the kind is something that
involves more than {{{*}}} and {{{->}}}?
(b) Change TyVarI from {{{TyVarI Name Type}}} to {{{TyVarI Name
TyVarBndr}}}. This seems like the most straightforward, stable way of
exposing kind information, but it requires a breaking API change.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10541>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list