summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Gundry <adam@well-typed.com>2017-02-08 21:22:54 +0000
committerAdam Gundry <adam@well-typed.com>2017-02-08 21:22:54 +0000
commit2833f0eae725e85bc180be151798f637bb5251c7 (patch)
tree2cc0abf2a5ed34a96b91ab87a13904720f82d192
parentbdd315839d1b906718d7bc7255fab3cbf0f702e2 (diff)
downloadhaskell-wip/orf-2017.tar.gz
Use OccSet instead of [FastString] in rnHsRecFields.rn_dotdotwip/orf-2017
-rw-r--r--compiler/rename/RnPat.hs8
1 files changed, 4 insertions, 4 deletions
diff --git a/compiler/rename/RnPat.hs b/compiler/rename/RnPat.hs
index 84dcc6997b..c18138bc86 100644
--- a/compiler/rename/RnPat.hs
+++ b/compiler/rename/RnPat.hs
@@ -618,20 +618,20 @@ rnHsRecFields ctxt mk_arg (HsRecFields { rec_flds = flds, rec_dotdot = dotdot })
; (rdr_env, lcl_env) <- getRdrEnvs
; con_fields <- lookupConstructorFields con
; when (null con_fields) (addErr (badDotDotCon con))
- ; let present_flds = map (occNameFS . rdrNameOcc) $ getFieldLbls flds
+ ; let present_flds = mkOccSet $ map rdrNameOcc (getFieldLbls flds)
-- For constructor uses (but not patterns)
-- the arg should be in scope locally;
-- i.e. not top level or imported
-- Eg. data R = R { x,y :: Int }
-- f x = R { .. } -- Should expand to R {x=x}, not R{x=x,y=y}
- arg_in_scope lbl = mkVarUnqual lbl `elemLocalRdrEnv` lcl_env
+ arg_in_scope lbl = mkRdrUnqual lbl `elemLocalRdrEnv` lcl_env
(dot_dot_fields, dot_dot_gres)
= unzip [ (fl, gre)
| fl <- con_fields
- , let lbl = flLabel fl
- , not (lbl `elem` present_flds)
+ , let lbl = mkVarOccFS (flLabel fl)
+ , not (lbl `elemOccSet` present_flds)
, Just gre <- [lookupGRE_FieldLabel rdr_env fl]
-- Check selector is in scope
, case ctxt of