[GHC] #10828: TH can't represent all GADTs in its AST
GHC
ghc-devs at haskell.org
Wed Sep 2 15:37:16 UTC 2015
#10828: TH can't represent all GADTs in its AST
-------------------------------------+-------------------------------------
Reporter: spinda | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Template Haskell | Version: 7.10.2
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Revisions:
-------------------------------------+-------------------------------------
Comment (by goldfire):
I believe the TH AST is fully expressive here (with one tiny caveat). It's
just clunky.
Take
{{{
data T :: k -> * -> * where
MkT :: T x Int
}}}
To encode into TH, you transform the definition to this:
{{{
data T (a1 :: k) (a2 :: *) = forall . a2 ~ Int => MkT
}}}
which has a direct translation.
The one tiny caveat is the new feature for deriving `Foldable` for GADTs,
which distinguishes among the two forms above. (I can't find a reference
to this change. Can you? It was described at Haskell Implementors'
Workshop a few days ago. You, the reader, if you know the reference,
please add it!)
Is it worth refactoring the TH types to handle GADTs more directly?
Perhaps.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10828#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list