diff options
author | Matthew Yacavone <matthew@yacavone.net> | 2018-11-29 18:42:39 -0500 |
---|---|---|
committer | Ryan Scott <ryan.gl.scott@gmail.com> | 2018-11-29 18:44:13 -0500 |
commit | fe57a5bae3f8cb87637359f615c77f4afae86d46 (patch) | |
tree | d36f6a009aa8c027e8b02b032301ec1c535b787e /compiler | |
parent | 2257a86daa72db382eb927df12a718669d5491f8 (diff) | |
download | haskell-fe57a5bae3f8cb87637359f615c77f4afae86d46.tar.gz |
Fix #15828, from `More explicit foralls`
Summary:
Fix a bug in commit 12eeb9 which permits the following:
```
class C a where
type T a b
instance C (Maybe a) where
type forall a b. T (Maybe a) b = b
```
where instead, the user should write:
```
instance C (Maybe a) where
type forall b. T (Maybe a) b = b
```
Update the users guide to discuss scoping of type variables in
explicit foralls in type family instances.
Test Plan: validate
Reviewers: bgamari, goldfire, monoidal
Reviewed By: goldfire
Subscribers: monoidal, rwbarton, carter
GHC Trac Issues: #15828
Differential Revision: https://phabricator.haskell.org/D5283
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/rename/RnSource.hs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/compiler/rename/RnSource.hs b/compiler/rename/RnSource.hs index 7a205ba3b9..6027110f36 100644 --- a/compiler/rename/RnSource.hs +++ b/compiler/rename/RnSource.hs @@ -738,7 +738,12 @@ rnFamInstEqn doc mb_cls rhs_kvars ; ((bndrs', pats', payload'), fvs) <- bindLocalNamesFV all_imp_var_names $ bindLHsTyVarBndrs doc (Just $ inHsDocContext doc) - mb_cls bndrs $ \bndrs' -> + Nothing bndrs $ \bndrs' -> + -- Note: If we pass mb_cls instead of Nothing here, + -- bindLHsTyVarBndrs will use class variables for any names + -- the user meant to bring in scope here. This is an explicit + -- forall, so we want fresh names, not class variables. + -- Thus: always pass Nothing do { (pats', pat_fvs) <- rnLHsTypes (FamPatCtx tycon) pats ; (payload', rhs_fvs) <- rn_payload doc payload |