Fix #14167 by using isGadtSyntaxTyCon in more places
authorRyan Scott <ryan.gl.scott@gmail.com>
Sat, 2 Sep 2017 19:33:25 +0000 (15:33 -0400)
committerRyan Scott <ryan.gl.scott@gmail.com>
Sat, 2 Sep 2017 19:33:26 +0000 (15:33 -0400)
commit8e4229ab3dc3e1717ad557ef00f3518da6b5c523
tree64a50dd06118a0d3709d37b258faa11eb4d1a218
parent5dd6b13c6e2942976aa3b5f4906ff7d0f959272d
Fix #14167 by using isGadtSyntaxTyCon in more places

Summary:
Two places in GHC effectively attempt to //guess// whether a data type
was declared using GADT syntax:

1. When reifying a data type in Template Haskell
2. When pretty-printing a data type (e.g., via `:info` in GHCi)

But there's no need for heuristics here, since we have a 100% accurate way to
determine whether a data type was declared using GADT syntax: the
`isGadtSyntaxTyCon` function! By simply using that as the metric, we obtain
far more accurate TH reification and pretty-printing results.

This is technically a breaking change, since Template Haskell reification will
now reify some data type constructors as `(Rec)GadtC` that it didn't before,
and some data type constructors that were previously reified as `(Rec)GadtC`
will no longer be reified as such. But it's a very understandable breaking
change, since the previous behavior was simply incorrect.

Test Plan: ./validate

Reviewers: simonpj, goldfire, austin, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie

GHC Trac Issues: #14167

Differential Revision: https://phabricator.haskell.org/D3901
compiler/iface/IfaceSyn.hs
compiler/iface/IfaceType.hs
compiler/typecheck/TcSplice.hs
docs/users_guide/8.4.1-notes.rst
testsuite/tests/ghci/scripts/T7730.stdout
testsuite/tests/ghci/scripts/T7873.stdout
testsuite/tests/ghci/scripts/T9181.stdout
testsuite/tests/ghci/scripts/ghci030.stdout
testsuite/tests/rename/should_fail/rnfail055.stderr
testsuite/tests/th/T4188.stderr
testsuite/tests/typecheck/should_fail/T3468.stderr