diff options
author | Ryan Scott <ryan.gl.scott@gmail.com> | 2020-07-16 14:04:28 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2020-09-17 19:46:29 -0400 |
commit | eae6f239db9d71143aaea4c7e83990c59874ab96 (patch) | |
tree | dc4c3d950d43b0c28f45b8ee468303e8ced63055 /testsuite/tests/typecheck/should_fail/T18455.stderr | |
parent | e8f5e16a78d7ac274d1c6e359cb455cbcd5abada (diff) | |
download | haskell-eae6f239db9d71143aaea4c7e83990c59874ab96.tar.gz |
Clean up the inferred type variable restriction
This patch primarily:
* Documents `checkInferredVars` (previously called
`check_inferred_vars`) more carefully. This is the
function which throws an error message if a user quantifies an
inferred type variable in a place where specificity cannot be
observed. See `Note [Unobservably inferred type variables]` in
`GHC.Rename.HsType`.
Note that I now invoke `checkInferredVars` _alongside_
`rnHsSigType`, `rnHsWcSigType`, etc. rather than doing so _inside_
of these functions. This results in slightly more call sites for
`checkInferredVars`, but it makes it much easier to enumerate the
spots where the inferred type variable restriction comes into
effect.
* Removes the inferred type variable restriction for default method
type signatures, per the discussion in #18432. As a result, this
patch fixes #18432.
Along the way, I performed some various cleanup:
* I moved `no_nested_foralls_contexts_err` into `GHC.Rename.Utils`
(under the new name `noNestedForallsContextsErr`), since it now
needs to be invoked from multiple modules. I also added a helper
function `addNoNestedForallsContextsErr` that throws the error
message after producing it, as this is a common idiom.
* In order to ensure that users cannot sneak inferred type variables
into `SPECIALISE instance` pragmas by way of nested `forall`s, I
now invoke `addNoNestedForallsContextsErr` when renaming
`SPECIALISE instance` pragmas, much like when we rename normal
instance declarations. (This probably should have originally been
done as a part of the fix for #18240, but this task was somehow
overlooked.) As a result, this patch fixes #18455 as a side effect.
(cherry picked from commit 502605f7ae9907a6b0b9823e8f055ae390c57b1d)
Diffstat (limited to 'testsuite/tests/typecheck/should_fail/T18455.stderr')
-rw-r--r-- | testsuite/tests/typecheck/should_fail/T18455.stderr | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/testsuite/tests/typecheck/should_fail/T18455.stderr b/testsuite/tests/typecheck/should_fail/T18455.stderr new file mode 100644 index 0000000000..15d02d1902 --- /dev/null +++ b/testsuite/tests/typecheck/should_fail/T18455.stderr @@ -0,0 +1,4 @@ + +T18455.hs:7:37: error: + SPECIALISE instance type cannot contain nested ‘forall’s or contexts + In a SPECIALISE instance pragma |