diff options
author | Ryan Scott <ryan.gl.scott@gmail.com> | 2017-01-23 09:06:04 -0500 |
---|---|---|
committer | Ryan Scott <ryan.gl.scott@gmail.com> | 2017-01-23 09:06:04 -0500 |
commit | 729a5e452db530e8da8ca163fcd842faac6bd690 (patch) | |
tree | 767d0f0a36a32ad947aabd8c12d27411f1d1d925 /testsuite/tests/th/TH_pragma.stderr | |
parent | 18ceb14828b96a2d2f08e962111f41c46a962983 (diff) | |
download | haskell-729a5e452db530e8da8ca163fcd842faac6bd690.tar.gz |
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
Diffstat (limited to 'testsuite/tests/th/TH_pragma.stderr')
-rw-r--r-- | testsuite/tests/th/TH_pragma.stderr | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/testsuite/tests/th/TH_pragma.stderr b/testsuite/tests/th/TH_pragma.stderr index ddd5998b39..1156adee27 100644 --- a/testsuite/tests/th/TH_pragma.stderr +++ b/testsuite/tests/th/TH_pragma.stderr @@ -11,6 +11,6 @@ TH_pragma.hs:(10,4)-(12,31): Splicing declarations {-# SPECIALISE INLINE [~1] bar :: Float -> Float #-} bar x = x * 10 |] ======> - bar :: forall a. Num a => a -> a + bar :: Num a => a -> a {-# SPECIALISE INLINE [~1] bar :: Float -> Float #-} bar x = (x * 10) |