summaryrefslogtreecommitdiff
path: root/testsuite/tests/typecheck/should_fail/T18455.hs
diff options
context:
space:
mode:
authorRyan Scott <ryan.gl.scott@gmail.com>2020-07-16 14:04:28 -0400
committerMarge Bot <ben+marge-bot@smart-cactus.org>2020-07-30 07:11:37 -0400
commit01c948eba4bea2d2c8ad340e12c1e7b732b334f7 (patch)
tree24d79117dd80af9d4c9b9d7f4c23c39bf335b260 /testsuite/tests/typecheck/should_fail/T18455.hs
parent502de55676a38572db60848c13392f5f115e1c8a (diff)
downloadhaskell-01c948eba4bea2d2c8ad340e12c1e7b732b334f7.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.
Diffstat (limited to 'testsuite/tests/typecheck/should_fail/T18455.hs')
-rw-r--r--testsuite/tests/typecheck/should_fail/T18455.hs7
1 files changed, 7 insertions, 0 deletions
diff --git a/testsuite/tests/typecheck/should_fail/T18455.hs b/testsuite/tests/typecheck/should_fail/T18455.hs
new file mode 100644
index 0000000000..ad151ae9a7
--- /dev/null
+++ b/testsuite/tests/typecheck/should_fail/T18455.hs
@@ -0,0 +1,7 @@
+{-# LANGUAGE RankNTypes #-}
+module T18455 where
+
+class C a
+
+instance C (Either a b) where
+ {-# SPECIALISE instance forall a. forall b. C (Either a b) #-}