Fix Template Haskell's handling of infix GADT constructors
authorRyanGlScott <ryan.gl.scott@gmail.com>
Fri, 8 Jan 2016 10:46:10 +0000 (11:46 +0100)
committerBen Gamari <ben@smart-cactus.org>
Fri, 8 Jan 2016 11:26:33 +0000 (12:26 +0100)
commit0163427761c0e72a3acf09f854b3447f2e553f1b
tree15e6280c8b8b44c845be010c558223f8c02b7115
parent6f2e722973b39b7ef423f6a6b96725395d561836
Fix Template Haskell's handling of infix GADT constructors

This is the second (and hopefully last) fix needed to make TH handle
GADTs properly (after D1465). This Diff addresses some issues with infix
GADT constructors, specifically:

* Before, you could not determine if a GADT constructor was declared
  infix because TH did not give you the ability to determine if there is
  a //user-specified// fixity declaration for that constructor. The
  return type of `reifyFixity` was changed to `Maybe Fixity` so that it
  yields `Just` the fixity is there is a fixity declaration, and
  `Nothing` otherwise (indicating it has `defaultFixity`).
* `DsMeta`/`Convert` were changed so that infix GADT constructors are
  turned into `GadtC`, not `InfixC` (which should be reserved for
  Haskell98 datatype declarations).
* Some minor fixes to the TH pretty-printer so that infix GADT
  constructors will be parenthesized in GADT signatures.

Fixes #11345.

Test Plan: ./validate

Reviewers: goldfire, austin, bgamari, jstolarek

Reviewed By: jstolarek

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D1744

GHC Trac Issues: #11345
compiler/deSugar/DsMeta.hs
compiler/typecheck/TcSplice.hs
libraries/ghci/GHCi/Message.hs
libraries/template-haskell/Language/Haskell/TH/Ppr.hs
libraries/template-haskell/Language/Haskell/TH/Syntax.hs
libraries/template-haskell/changelog.md
testsuite/tests/th/T10704.stdout
testsuite/tests/th/T11345.hs [new file with mode: 0644]
testsuite/tests/th/T11345.stdout [new file with mode: 0644]
testsuite/tests/th/all.T