summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Scott <ryan.gl.scott@gmail.com>2020-05-04 13:21:49 -0400
committerRyan Scott <ryan.gl.scott@gmail.com>2020-05-04 13:26:35 -0400
commitae54eefe3f66dd426c60e434c7f837102db01a00 (patch)
tree0fc633fc9138484f059c76f99049ce4f3d3d7538
parent0bf640b19d7a7ad0800152752a71c1dd4e6c696d (diff)
downloadhaskell-wip/refactor-rnMethodBinds.tar.gz
Refactoring: Use bindSigTyVarsFV in rnMethodBindswip/refactor-rnMethodBinds
`rnMethodBinds` was explicitly using `xoptM` to determine if `ScopedTypeVariables` is enabled before bringing type variables bound by the class/instance header into scope. However, this `xoptM` logic is already performed by the `bindSigTyVarsFV` function. This patch uses `bindSigTyVarsFV` in `rnMethodBinds` to reduce the number of places where we need to consult if `ScopedTypeVariables` is on. This is purely refactoring, and there should be no user-visible change in behavior.
-rw-r--r--compiler/GHC/Rename/Bind.hs9
1 files changed, 1 insertions, 8 deletions
diff --git a/compiler/GHC/Rename/Bind.hs b/compiler/GHC/Rename/Bind.hs
index c6c175c07c..fe7fb78b08 100644
--- a/compiler/GHC/Rename/Bind.hs
+++ b/compiler/GHC/Rename/Bind.hs
@@ -869,8 +869,7 @@ rnMethodBinds is_cls_decl cls ktv_names binds sigs
-- Rename the bindings RHSs. Again there's an issue about whether the
-- type variables from the class/instance head are in scope.
-- Answer no in Haskell 2010, but yes if you have -XScopedTypeVariables
- ; scoped_tvs <- xoptM LangExt.ScopedTypeVariables
- ; (binds'', bind_fvs) <- maybe_extend_tyvar_env scoped_tvs $
+ ; (binds'', bind_fvs) <- bindSigTyVarsFV ktv_names $
do { binds_w_dus <- mapBagM (rnLBind (mkScopedTvFn other_sigs')) binds'
; let bind_fvs = foldr (\(_,_,fv1) fv2 -> fv1 `plusFV` fv2)
emptyFVs binds_w_dus
@@ -878,12 +877,6 @@ rnMethodBinds is_cls_decl cls ktv_names binds sigs
; return ( binds'', spec_inst_prags' ++ other_sigs'
, sig_fvs `plusFV` sip_fvs `plusFV` bind_fvs) }
- where
- -- For the method bindings in class and instance decls, we extend
- -- the type variable environment iff -XScopedTypeVariables
- maybe_extend_tyvar_env scoped_tvs thing_inside
- | scoped_tvs = extendTyVarEnvFVRn ktv_names thing_inside
- | otherwise = thing_inside
rnMethodBindLHS :: Bool -> Name
-> LHsBindLR GhcPs GhcPs