[GHC] #14167: GHC often depicts H98 datatypes as GADTs when it shouldn't
GHC
ghc-devs at haskell.org
Tue Aug 29 14:33:29 UTC 2017
#14167: GHC often depicts H98 datatypes as GADTs when it shouldn't
-------------------------------------+-------------------------------------
Reporter: RyanGlScott | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.2.1
Keywords: GADTs, | Operating System: Unknown/Multiple
TemplateHaskell |
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
(Spun off from Phab:D3880.)
There are at least a couple of points in the GHC codebase where poor
decisions are made regarding whether to depict a datatype using H98 syntax
or GADT syntax. In particular:
1. When reifying a datatype in Template Haskell, some complicated
heuristics are used to determine whether a datatype is reified with
`(Rec)GadtC` or not (see `Note [Reifying GADT data constructors]` in
`TcSplice` for the horrifying details). But these heuristics are far from
perfect, as they will cause some vanilla datatypes to be reified as GADTs
(e.g., `data T a = (a ~ Int) => MkT`).
2. When pretty-printing a datatype (for instance, via the `:info` command
in GHCi), GHC also chooses to sometimes depict vanilla datatypes as GADTs.
For instance:
{{{
λ> :set -XExistentialQuantification
λ> data Foo a = Show a => Foo
λ> :i Foo
type role Foo nominal
data Foo a where
Foo :: Show a => Foo a
}}}
`Foo` is depicted as a GADT, despite the fact that we didn't use GADT
syntax.
There might be other places in the code that exhibit these symptoms too—we
should take a closer look.
I use the phrase "poor decisions" above since GHC really does have the
right info it needs to make the correct decisions. That info is in the
form of the `isGadtSyntaxTyCon`, which conveniently recalls whether a
datatype was declared with GADT syntax or not. With this, we should be
able to eliminate the flawed heuristics that GHC is currently using and
accurately depict datatypes the way users wrote them.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14167>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list