Don't quantify implicit type variables when quoting type signatures in TH
authorRyan Scott <ryan.gl.scott@gmail.com>
Mon, 23 Jan 2017 14:06:04 +0000 (09:06 -0500)
committerRyan Scott <ryan.gl.scott@gmail.com>
Mon, 23 Jan 2017 14:06:04 +0000 (09:06 -0500)
commit729a5e452db530e8da8ca163fcd842faac6bd690
tree767d0f0a36a32ad947aabd8c12d27411f1d1d925
parent18ceb14828b96a2d2f08e962111f41c46a962983
Don't quantify implicit type variables when quoting type signatures in TH

Summary:
A bug was introduced in GHC 8.0 in which Template Haskell-quoted type
signatures would quantify _all_ their type variables, even the implicit ones.
This would cause splices like this:

```
$([d| idProxy :: forall proxy (a :: k). proxy a -> proxy a
      idProxy x = x
   |])
```

To splice back in something that was slightly different:

```
idProxy :: forall k proxy (a :: k). proxy a -> proxy a
idProxy x = x
```

Notice that the kind variable `k` is now explicitly quantified! What's worse,
this now requires the `TypeInType` extension to be enabled.

This changes the behavior of Template Haskell quoting to never explicitly
quantify type variables which are implicitly quantified in the source.

There are some other places where this behavior pops up too, including
class methods, type ascriptions, `SPECIALIZE` pragmas, foreign imports,
and pattern synonynms (#13018), so I fixed those too.

Fixes #13018 and #13123.

Test Plan: ./validate

Reviewers: simonpj, goldfire, austin, bgamari

Reviewed By: simonpj, goldfire

Subscribers: simonpj, mpickering, thomie

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

GHC Trac Issues: #13018, #13123
13 files changed:
compiler/deSugar/DsMeta.hs
docs/users_guide/8.2.1-notes.rst
testsuite/tests/ghci/scripts/T11098.stdout
testsuite/tests/th/T10828.stderr
testsuite/tests/th/T11797.stderr
testsuite/tests/th/T13018.hs [new file with mode: 0644]
testsuite/tests/th/T13123.hs [new file with mode: 0644]
testsuite/tests/th/T5217.stderr
testsuite/tests/th/T7064.stdout
testsuite/tests/th/T8625.stdout
testsuite/tests/th/TH_RichKinds2.stderr
testsuite/tests/th/TH_pragma.stderr
testsuite/tests/th/all.T