summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorsten Schmits <git@tryp.io>2022-07-22 22:49:11 +0200
committerTorsten Schmits <git@tryp.io>2022-07-22 22:49:11 +0200
commit6a817e125099f5d50fc371f430b05f0ac18a5c89 (patch)
treebe17aaccf3cd21fd2bcc488a387230896432547f
parent4ded00fc1fbd1a308d130741d01c8f63404ed321 (diff)
downloadhaskell-6a817e125099f5d50fc371f430b05f0ac18a5c89.tar.gz
filter out named wildcards in scope when renaming them in rnWcBody
-rw-r--r--compiler/GHC/Rename/HsType.hs12
1 files changed, 9 insertions, 3 deletions
diff --git a/compiler/GHC/Rename/HsType.hs b/compiler/GHC/Rename/HsType.hs
index 7d62a858bb..70be2f6206 100644
--- a/compiler/GHC/Rename/HsType.hs
+++ b/compiler/GHC/Rename/HsType.hs
@@ -234,11 +234,19 @@ rnHsPatSigTypeBindingVars ctxt sigType thing_inside = case sigType of
(res, fvs') <- thing_inside sig_ty
return (res, fvs `plusFV` fvs')
+unboundWildcards :: FreeKiTyVars -> RnM [Name]
+unboundWildcards tyvars = do
+ new <- filterInScopeM tyvars
+ mapM newLocalBndrRn (nubL (wcs new))
+ where
+ wcs =
+ filter (startsWithUnderscore . rdrNameOcc . unLoc)
+
rnWcBody :: HsDocContext -> [LocatedN RdrName] -> LHsType GhcPs
-> RnM ([Name], LHsType GhcRn, FreeVars)
rnWcBody ctxt tyvars hs_ty
= do { wildcards_enabled <- xoptM LangExt.NamedWildCards
- ; nwcs <- if wildcards_enabled then mapM newLocalBndrRn (nubL (wcs tyvars)) else pure []
+ ; nwcs <- if wildcards_enabled then unboundWildcards tyvars else pure []
; let env = RTKE { rtke_level = TypeLevel
, rtke_what = RnTypeBody
, rtke_nwcs = mkNameSet nwcs
@@ -247,8 +255,6 @@ rnWcBody ctxt tyvars hs_ty
rn_lty env hs_ty
; return (nwcs, hs_ty', fvs) }
where
- wcs =
- filter (startsWithUnderscore . rdrNameOcc . unLoc)
rn_lty env (L loc hs_ty)
= setSrcSpanA loc $
do { (hs_ty', fvs) <- rn_ty env hs_ty