2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section[RnBinds]{Renaming and dependency analysis of bindings}
6 This module does renaming and dependency analysis on value bindings in
7 the abstract syntax. It does {\em not} do cycle-checks on class or
8 type-synonym declarations; those cannot be done at this stage because
9 they may be affected by renaming (which isn't fully worked out yet).
12 module RnBinds (rnTopBinds, rnTopBindsLHS, rnTopBindsRHS, -- use these for top-level bindings
13 rnLocalBindsAndThen, rnValBindsLHS, rnValBindsRHS, -- or these for local bindings
14 rnMethodBinds, renameSigs, mkSigTvFn,
15 rnMatchGroup, rnGRHSs,
16 makeMiniFixityEnv, MiniFixityEnv
19 import {-# SOURCE #-} RnExpr( rnLExpr, rnStmts )
25 import RnTypes ( rnHsSigType, rnLHsType, checkPrecMatch)
26 import RnPat (rnPatsAndThen_LocalRightwards, rnBindPat,
27 NameMaker, localRecNameMaker, topRecNameMaker, applyNameMaker
31 import DynFlags ( DynFlag(..) )
35 import RdrName ( RdrName, rdrNameOcc )
37 import ListSetOps ( findDupsEq )
38 import BasicTypes ( RecFlag(..) )
39 import Digraph ( SCC(..), stronglyConnCompFromEdgedVertices )
43 import Data.List ( partition )
44 import Maybes ( orElse )
48 -- ToDo: Put the annotations into the monad, so that they arrive in the proper
49 -- place and can be used when complaining.
51 The code tree received by the function @rnBinds@ contains definitions
52 in where-clauses which are all apparently mutually recursive, but which may
53 not really depend upon each other. For example, in the top level program
58 the definitions of @a@ and @y@ do not depend on each other at all.
59 Unfortunately, the typechecker cannot always check such definitions.
60 \footnote{Mycroft, A. 1984. Polymorphic type schemes and recursive
61 definitions. In Proceedings of the International Symposium on Programming,
62 Toulouse, pp. 217-39. LNCS 167. Springer Verlag.}
63 However, the typechecker usually can check definitions in which only the
64 strongly connected components have been collected into recursive bindings.
65 This is precisely what the function @rnBinds@ does.
67 ToDo: deal with case where a single monobinds binds the same variable
70 The vertag tag is a unique @Int@; the tags only need to be unique
71 within one @MonoBinds@, so that unique-Int plumbing is done explicitly
72 (heavy monad machinery not needed).
75 %************************************************************************
77 %* naming conventions *
79 %************************************************************************
81 \subsection[name-conventions]{Name conventions}
83 The basic algorithm involves walking over the tree and returning a tuple
84 containing the new tree plus its free variables. Some functions, such
85 as those walking polymorphic bindings (HsBinds) and qualifier lists in
86 list comprehensions (@Quals@), return the variables bound in local
87 environments. These are then used to calculate the free variables of the
88 expression evaluated in these environments.
90 Conventions for variable names are as follows:
93 new code is given a prime to distinguish it from the old.
96 a set of variables defined in @Exp@ is written @dvExp@
99 a set of variables free in @Exp@ is written @fvExp@
102 %************************************************************************
104 %* analysing polymorphic bindings (HsBindGroup, HsBind)
106 %************************************************************************
108 \subsubsection[dep-HsBinds]{Polymorphic bindings}
110 Non-recursive expressions are reconstructed without any changes at top
111 level, although their component expressions may have to be altered.
112 However, non-recursive expressions are currently not expected as
113 \Haskell{} programs, and this code should not be executed.
115 Monomorphic bindings contain information that is returned in a tuple
116 (a @FlatMonoBinds@) containing:
120 a unique @Int@ that serves as the ``vertex tag'' for this binding.
123 the name of a function or the names in a pattern. These are a set
124 referred to as @dvLhs@, the defined variables of the left hand side.
127 the free variables of the body. These are referred to as @fvBody@.
130 the definition's actual code. This is referred to as just @code@.
133 The function @nonRecDvFv@ returns two sets of variables. The first is
134 the set of variables defined in the set of monomorphic bindings, while the
135 second is the set of free variables in those bindings.
137 The set of variables defined in a non-recursive binding is just the
138 union of all of them, as @union@ removes duplicates. However, the
139 free variables in each successive set of cumulative bindings is the
140 union of those in the previous set plus those of the newest binding after
141 the defined variables of the previous set have been removed.
143 @rnMethodBinds@ deals only with the declarations in class and
144 instance declarations. It expects only to see @FunMonoBind@s, and
145 it expects the global environment to contain bindings for the binders
146 (which are all class operations).
148 %************************************************************************
150 \subsubsection{ Top-level bindings}
152 %************************************************************************
155 -- for top-level bindings, we need to make top-level names,
156 -- so we have a different entry point than for local bindings
157 rnTopBindsLHS :: MiniFixityEnv
158 -> HsValBinds RdrName
159 -> RnM (HsValBindsLR Name RdrName)
160 rnTopBindsLHS fix_env binds =
161 (uncurry $ rnValBindsLHSFromDoc (topRecNameMaker fix_env)) (bindersAndDoc binds) binds
163 rnTopBindsRHS :: NameSet -- Names bound by these binds
164 -> HsValBindsLR Name RdrName
165 -> RnM (HsValBinds Name, DefUses)
166 rnTopBindsRHS bound_names binds =
167 do { is_boot <- tcIsHsBoot
169 then rnTopBindsBoot binds
170 else rnValBindsRHSGen (\x -> x) -- don't trim free vars
173 -- Wrapper if we don't need to do anything in between the left and right,
174 -- or anything else in the scope of the left
176 -- Never used when there are fixity declarations
177 rnTopBinds :: HsValBinds RdrName
178 -> RnM (HsValBinds Name, DefUses)
180 do nl <- rnTopBindsLHS emptyFsEnv b
181 let bound_names = map unLoc (collectHsValBinders nl)
182 bindLocalNames bound_names $ rnTopBindsRHS (mkNameSet bound_names) nl
185 rnTopBindsBoot :: HsValBindsLR Name RdrName -> RnM (HsValBinds Name, DefUses)
186 -- A hs-boot file has no bindings.
187 -- Return a single HsBindGroup with empty binds and renamed signatures
188 rnTopBindsBoot (ValBindsIn mbinds sigs)
189 = do { checkErr (isEmptyLHsBinds mbinds) (bindsInHsBootFile mbinds)
190 ; sigs' <- renameSigs Nothing okHsBootSig sigs
191 ; return (ValBindsOut [] sigs', usesOnly (hsSigsFVs sigs')) }
192 rnTopBindsBoot b = pprPanic "rnTopBindsBoot" (ppr b)
197 %*********************************************************
201 %*********************************************************
204 rnLocalBindsAndThen :: HsLocalBinds RdrName
205 -> (HsLocalBinds Name -> RnM (result, FreeVars))
206 -> RnM (result, FreeVars)
207 -- This version (a) assumes that the binding vars are *not* already in scope
208 -- (b) removes the binders from the free vars of the thing inside
209 -- The parser doesn't produce ThenBinds
210 rnLocalBindsAndThen EmptyLocalBinds thing_inside
211 = thing_inside EmptyLocalBinds
213 rnLocalBindsAndThen (HsValBinds val_binds) thing_inside
214 = rnValBindsAndThen val_binds $ \ val_binds' ->
215 thing_inside (HsValBinds val_binds')
217 rnLocalBindsAndThen (HsIPBinds binds) thing_inside = do
218 (binds',fv_binds) <- rnIPBinds binds
219 (thing, fvs_thing) <- thing_inside (HsIPBinds binds')
220 return (thing, fvs_thing `plusFV` fv_binds)
222 rnIPBinds :: HsIPBinds RdrName -> RnM (HsIPBinds Name, FreeVars)
223 rnIPBinds (IPBinds ip_binds _no_dict_binds) = do
224 (ip_binds', fvs_s) <- mapAndUnzipM (wrapLocFstM rnIPBind) ip_binds
225 return (IPBinds ip_binds' emptyLHsBinds, plusFVs fvs_s)
227 rnIPBind :: IPBind RdrName -> RnM (IPBind Name, FreeVars)
228 rnIPBind (IPBind n expr) = do
229 name <- newIPNameRn n
230 (expr',fvExpr) <- rnLExpr expr
231 return (IPBind name expr', fvExpr)
235 %************************************************************************
239 %************************************************************************
242 -- wrapper for local binds
243 -- creates the documentation info and calls the helper below
244 rnValBindsLHS :: MiniFixityEnv
245 -> HsValBinds RdrName
246 -> RnM (HsValBindsLR Name RdrName)
247 rnValBindsLHS fix_env binds =
248 let (boundNames,doc) = bindersAndDoc binds
249 in rnValBindsLHSFromDoc_Local boundNames doc fix_env binds
251 -- a helper used for local binds that does the duplicates check,
252 -- just so we don't forget to do it somewhere
253 rnValBindsLHSFromDoc_Local :: [Located RdrName] -- RdrNames of the LHS (so we don't have to gather them twice)
254 -> SDoc -- doc string for dup names and shadowing
256 -> HsValBinds RdrName
257 -> RnM (HsValBindsLR Name RdrName)
259 rnValBindsLHSFromDoc_Local boundNames doc fix_env binds = do
260 -- Do error checking: we need to check for dups here because we
261 -- don't don't bind all of the variables from the ValBinds at once
262 -- with bindLocatedLocals any more.
263 checkDupAndShadowedRdrNames doc boundNames
265 -- (Note that we don't want to do this at the top level, since
266 -- sorting out duplicates and shadowing there happens elsewhere.
267 -- The behavior is even different. For example,
270 -- should not produce a shadowing warning (but it will produce
271 -- an ambiguity warning if you use f), but
273 -- g = let f = ... in f
275 rnValBindsLHSFromDoc (localRecNameMaker fix_env) boundNames doc binds
277 bindersAndDoc :: HsValBinds RdrName -> ([Located RdrName], SDoc)
278 bindersAndDoc binds =
280 -- the unrenamed bndrs for error checking and reporting
281 orig = collectHsValBinders binds
282 doc = text "In the binding group for:" <+> pprWithCommas ppr (map unLoc orig)
286 -- renames the left-hand sides
287 -- generic version used both at the top level and for local binds
288 -- does some error checking, but not what gets done elsewhere at the top level
289 rnValBindsLHSFromDoc :: NameMaker
290 -> [Located RdrName] -- RdrNames of the LHS (so we don't have to gather them twice)
291 -> SDoc -- doc string for dup names and shadowing
292 -> HsValBinds RdrName
293 -> RnM (HsValBindsLR Name RdrName)
294 rnValBindsLHSFromDoc topP _original_bndrs doc (ValBindsIn mbinds sigs) = do
296 mbinds' <- mapBagM (rnBindLHS topP doc) mbinds
297 return $ ValBindsIn mbinds' sigs
298 rnValBindsLHSFromDoc _ _ _ b = pprPanic "rnValBindsLHSFromDoc" (ppr b)
300 -- General version used both from the top-level and for local things
301 -- Assumes the LHS vars are in scope
303 -- Does not bind the local fixity declarations
304 rnValBindsRHSGen :: (FreeVars -> FreeVars) -- for trimming free var sets
305 -- The trimming function trims the free vars we attach to a
306 -- binding so that it stays reasonably small
307 -> NameSet -- Names bound by the LHSes
308 -> HsValBindsLR Name RdrName
309 -> RnM (HsValBinds Name, DefUses)
311 rnValBindsRHSGen trim bound_names (ValBindsIn mbinds sigs) = do
313 sigs' <- renameSigs (Just bound_names) okBindSig sigs
315 binds_w_dus <- mapBagM (rnBind (mkSigTvFn sigs') trim) mbinds
316 case depAnalBinds binds_w_dus of
317 (anal_binds, anal_dus) ->
318 do let valbind' = ValBindsOut anal_binds sigs'
319 valbind'_dus = usesOnly (hsSigsFVs sigs') `plusDU` anal_dus
320 return (valbind', valbind'_dus)
322 rnValBindsRHSGen _ _ b = pprPanic "rnValBindsRHSGen" (ppr b)
324 -- Wrapper for local binds
326 -- The *client* of this function is responsible for checking for unused binders;
327 -- it doesn't (and can't: we don't have the thing inside the binds) happen here
329 -- The client is also responsible for bringing the fixities into scope
330 rnValBindsRHS :: NameSet -- names bound by the LHSes
331 -> HsValBindsLR Name RdrName
332 -> RnM (HsValBinds Name, DefUses)
333 rnValBindsRHS bound_names binds =
334 rnValBindsRHSGen (\ fvs -> -- only keep the names the names from this group
335 intersectNameSet bound_names fvs) bound_names binds
339 -- wrapper that does both the left- and right-hand sides
341 -- here there are no local fixity decls passed in;
342 -- the local fixity decls come from the ValBinds sigs
343 rnValBindsAndThen :: HsValBinds RdrName
344 -> (HsValBinds Name -> RnM (result, FreeVars))
345 -> RnM (result, FreeVars)
346 rnValBindsAndThen binds@(ValBindsIn _ sigs) thing_inside
347 = do { let (original_bndrs, doc) = bindersAndDoc binds
349 -- (A) Create the local fixity environment
350 ; new_fixities <- makeMiniFixityEnv [L loc sig | L loc (FixSig sig) <- sigs]
352 -- (B) Rename the LHSes
353 ; new_lhs <- rnValBindsLHSFromDoc_Local original_bndrs doc new_fixities binds
354 ; let bound_names = map unLoc $ collectHsValBinders new_lhs
356 -- ...and bring them (and their fixities) into scope
357 ; bindLocalNamesFV_WithFixities bound_names new_fixities $ do
359 { -- (C) Do the RHS and thing inside
360 (binds', dus) <- rnValBindsRHS (mkNameSet bound_names) new_lhs
361 ; (result, result_fvs) <- thing_inside binds'
363 -- Report unused bindings based on the (accurate)
366 -- should report 'x' unused
367 ; let real_uses = findUses dus result_fvs
368 ; warnUnusedLocalBinds bound_names real_uses
371 -- The variables "used" in the val binds are:
372 -- (1) the uses of the binds (duUses)
373 -- (2) the FVs of the thing-inside
374 all_uses = duUses dus `plusFV` result_fvs
375 -- Note [Unused binding hack]
376 -- ~~~~~~~~~~~~~~~~~~~~~~~~~~
377 -- Note that *in contrast* to the above reporting of
378 -- unused bindings, (1) above uses duUses to return *all*
379 -- the uses, even if the binding is unused. Otherwise consider:
381 -- y = let p = x in 'x' -- NB: p not used
382 -- If we don't "see" the dependency of 'y' on 'x', we may put the
383 -- bindings in the wrong order, and the type checker will complain
384 -- that x isn't in scope
386 -- But note that this means we won't report 'x' as unused,
387 -- whereas we would if we had { x = 3; p = x; y = 'x' }
389 ; return (result, all_uses) }}
390 -- The bound names are pruned out of all_uses
391 -- by the bindLocalNamesFV call above
393 rnValBindsAndThen bs _ = pprPanic "rnValBindsAndThen" (ppr bs)
396 -- Process the fixity declarations, making a FastString -> (Located Fixity) map
397 -- (We keep the location around for reporting duplicate fixity declarations.)
399 -- Checks for duplicates, but not that only locally defined things are fixed.
400 -- Note: for local fixity declarations, duplicates would also be checked in
401 -- check_sigs below. But we also use this function at the top level.
403 makeMiniFixityEnv :: [LFixitySig RdrName] -> RnM MiniFixityEnv
405 makeMiniFixityEnv decls = foldlM add_one emptyFsEnv decls
407 add_one env (L loc (FixitySig (L name_loc name) fixity)) = do
408 { -- this fixity decl is a duplicate iff
409 -- the ReaderName's OccName's FastString is already in the env
410 -- (we only need to check the local fix_env because
411 -- definitions of non-local will be caught elsewhere)
412 let { fs = occNameFS (rdrNameOcc name)
413 ; fix_item = L loc fixity };
415 case lookupFsEnv env fs of
416 Nothing -> return $ extendFsEnv env fs fix_item
417 Just (L loc' _) -> do
419 addLocErr (L name_loc name) (dupFixityDecl loc')
423 dupFixityDecl :: SrcSpan -> RdrName -> SDoc
424 dupFixityDecl loc rdr_name
425 = vcat [ptext (sLit "Multiple fixity declarations for") <+> quotes (ppr rdr_name),
426 ptext (sLit "also at ") <+> ppr loc]
428 ---------------------
430 -- renaming a single bind
432 rnBindLHS :: NameMaker
435 -- returns the renamed left-hand side,
436 -- and the FreeVars *of the LHS*
437 -- (i.e., any free variables of the pattern)
438 -> RnM (LHsBindLR Name RdrName)
440 rnBindLHS name_maker _ (L loc (PatBind { pat_lhs = pat,
442 pat_rhs_ty=pat_rhs_ty
444 = setSrcSpan loc $ do
445 -- we don't actually use the FV processing of rnPatsAndThen here
446 (pat',pat'_fvs) <- rnBindPat name_maker pat
447 return (L loc (PatBind { pat_lhs = pat',
449 -- we temporarily store the pat's FVs here;
450 -- gets updated to the FVs of the whole bind
451 -- when doing the RHS below
453 -- these will get ignored in the next pass,
454 -- when we rename the RHS
455 pat_rhs_ty = pat_rhs_ty }))
457 rnBindLHS name_maker _ (L loc (FunBind { fun_id = name@(L nameLoc _),
459 fun_matches = matches,
460 fun_co_fn = fun_co_fn,
464 do { (newname, _fvs) <- applyNameMaker name_maker name $ \ newname ->
465 return (newname, emptyFVs)
466 ; return (L loc (FunBind { fun_id = L nameLoc newname,
468 fun_matches = matches,
469 -- we temporatily store the LHS's FVs (empty in this case) here
470 -- gets updated when doing the RHS below
472 -- everything else will get ignored in the next pass
473 fun_co_fn = fun_co_fn,
477 rnBindLHS _ _ b = pprPanic "rnBindLHS" (ppr b)
479 -- assumes the left-hands-side vars are in scope
480 rnBind :: (Name -> [Name]) -- Signature tyvar function
481 -> (FreeVars -> FreeVars) -- Trimming function for rhs free vars
482 -> LHsBindLR Name RdrName
483 -> RnM (LHsBind Name, [Name], Uses)
484 rnBind _ trim (L loc (PatBind { pat_lhs = pat,
486 -- pat fvs were stored here while
487 -- processing the LHS
490 do {let bndrs = collectPatBinders pat
492 ; (grhss', fvs) <- rnGRHSs PatBindRhs grhss
493 -- No scoped type variables for pattern bindings
494 ; let fvs' = trim fvs
496 ; fvs' `seq` -- See Note [Free-variable space leak]
497 return (L loc (PatBind { pat_lhs = pat,
499 pat_rhs_ty = placeHolderType,
501 bndrs, pat_fvs `plusFV` fvs) }
505 (L loc (FunBind { fun_id = name,
507 fun_matches = matches,
511 -- invariant: no free vars here when it's a FunBind
513 do { let plain_name = unLoc name
515 ; (matches', fvs) <- bindSigTyVarsFV (sig_fn plain_name) $
516 -- bindSigTyVars tests for Opt_ScopedTyVars
517 rnMatchGroup (FunRhs plain_name inf) matches
518 ; let fvs' = trim fvs
520 ; checkPrecMatch inf plain_name matches'
522 ; fvs' `seq` -- See Note [Free-variable space leak]
523 return (L loc (FunBind { fun_id = name,
525 fun_matches = matches',
527 fun_co_fn = idHsWrapper,
528 fun_tick = Nothing }),
532 rnBind _ _ b = pprPanic "rnBind" (ppr b)
535 Note [Free-variable space leak]
536 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
539 and we seq fvs' before turning it as part of a record.
541 The reason is that trim is sometimes something like
542 \xs -> intersectNameSet (mkNameSet bound_names) xs
543 and we don't want to retain the list bound_names. This showed up in
547 ---------------------
548 depAnalBinds :: Bag (LHsBind Name, [Name], Uses)
549 -> ([(RecFlag, LHsBinds Name)], DefUses)
550 -- Dependency analysis; this is important so that
551 -- unused-binding reporting is accurate
552 depAnalBinds binds_w_dus
553 = (map get_binds sccs, map get_du sccs)
555 sccs = stronglyConnCompFromEdgedVertices edges
557 keyd_nodes = bagToList binds_w_dus `zip` [0::Int ..]
559 edges = [ (node, key, [key | n <- nameSetToList uses,
560 Just key <- [lookupNameEnv key_map n] ])
561 | (node@(_,_,uses), key) <- keyd_nodes ]
563 key_map :: NameEnv Int -- Which binding it comes from
564 key_map = mkNameEnv [(bndr, key) | ((_, bndrs, _), key) <- keyd_nodes
567 get_binds (AcyclicSCC (bind, _, _)) = (NonRecursive, unitBag bind)
568 get_binds (CyclicSCC binds_w_dus) = (Recursive, listToBag [b | (b,_,_) <- binds_w_dus])
570 get_du (AcyclicSCC (_, bndrs, uses)) = (Just (mkNameSet bndrs), uses)
571 get_du (CyclicSCC binds_w_dus) = (Just defs, uses)
573 defs = mkNameSet [b | (_,bs,_) <- binds_w_dus, b <- bs]
574 uses = unionManyNameSets [u | (_,_,u) <- binds_w_dus]
577 ---------------------
578 -- Bind the top-level forall'd type variables in the sigs.
581 -- The 'a' scopes over the rhs
583 -- NB: there'll usually be just one (for a function binding)
584 -- but if there are many, one may shadow the rest; too bad!
585 -- e.g x :: [a] -> [a]
588 -- In e, 'a' will be in scope, and it'll be the one from 'y'!
590 mkSigTvFn :: [LSig Name] -> (Name -> [Name])
591 -- Return a lookup function that maps an Id Name to the names
592 -- of the type variables that should scope over its body..
594 = \n -> lookupNameEnv env n `orElse` []
596 env :: NameEnv [Name]
597 env = mkNameEnv [ (name, map hsLTyVarName ltvs)
598 | L _ (TypeSig (L _ name)
599 (L _ (HsForAllTy Explicit ltvs _ _))) <- sigs]
600 -- Note the pattern-match on "Explicit"; we only bind
601 -- type variables from signatures with an explicit top-level for-all
605 @rnMethodBinds@ is used for the method bindings of a class and an instance
606 declaration. Like @rnBinds@ but without dependency analysis.
608 NOTA BENE: we record each {\em binder} of a method-bind group as a free variable.
609 That's crucial when dealing with an instance decl:
611 instance Foo (T a) where
614 This might be the {\em sole} occurrence of @op@ for an imported class @Foo@,
615 and unless @op@ occurs we won't treat the type signature of @op@ in the class
616 decl for @Foo@ as a source of instance-decl gates. But we should! Indeed,
617 in many ways the @op@ in an instance decl is just like an occurrence, not
621 rnMethodBinds :: Name -- Class name
622 -> (Name -> [Name]) -- Signature tyvar function
623 -> [Name] -- Names for generic type variables
625 -> RnM (LHsBinds Name, FreeVars)
627 rnMethodBinds cls sig_fn gen_tyvars binds
628 = foldM do_one (emptyBag,emptyFVs) (bagToList binds)
629 where do_one (binds,fvs) bind = do
630 (bind', fvs_bind) <- rnMethodBind cls sig_fn gen_tyvars bind
631 return (bind' `unionBags` binds, fvs_bind `plusFV` fvs)
636 -> LHsBindLR RdrName RdrName
637 -> RnM (Bag (LHsBindLR Name Name), FreeVars)
638 rnMethodBind cls sig_fn gen_tyvars (L loc (FunBind { fun_id = name, fun_infix = inf,
639 fun_matches = MatchGroup matches _ }))
640 = setSrcSpan loc $ do
641 sel_name <- lookupInstDeclBndr cls name
642 let plain_name = unLoc sel_name
643 -- We use the selector name as the binder
645 bindSigTyVarsFV (sig_fn plain_name) $ do
646 (new_matches, fvs) <- mapFvRn (rn_match plain_name) matches
648 new_group = MatchGroup new_matches placeHolderType
650 checkPrecMatch inf plain_name new_group
651 return (unitBag (L loc (FunBind {
652 fun_id = sel_name, fun_infix = inf,
653 fun_matches = new_group,
654 bind_fvs = fvs, fun_co_fn = idHsWrapper,
655 fun_tick = Nothing })),
656 fvs `addOneFV` plain_name)
657 -- The 'fvs' field isn't used for method binds
659 -- Truly gruesome; bring into scope the correct members of the generic
660 -- type variables. See comments in RnSource.rnSourceDecl(ClassDecl)
661 rn_match sel_name match@(L _ (Match (L _ (TypePat ty) : _) _ _))
662 = extendTyVarEnvFVRn gen_tvs $
663 rnMatch (FunRhs sel_name inf) match
665 tvs = map (rdrNameOcc.unLoc) (extractHsTyRdrTyVars ty)
666 gen_tvs = [tv | tv <- gen_tyvars, nameOccName tv `elem` tvs]
668 rn_match sel_name match = rnMatch (FunRhs sel_name inf) match
671 -- Can't handle method pattern-bindings which bind multiple methods.
672 rnMethodBind _ _ _ mbind@(L _ (PatBind _ _ _ _)) = do
673 addLocErr mbind methodBindErr
674 return (emptyBag, emptyFVs)
676 rnMethodBind _ _ _ b = pprPanic "rnMethodBind" (ppr b)
681 %************************************************************************
683 \subsubsection[dep-Sigs]{Signatures (and user-pragmas for values)}
685 %************************************************************************
687 @renameSigs@ checks for:
689 \item more than one sig for one thing;
690 \item signatures given for things not bound here;
693 At the moment we don't gather free-var info from the types in
694 signatures. We'd only need this if we wanted to report unused tyvars.
697 renameSigs :: Maybe NameSet -- If (Just ns) complain if the sig isn't for one of ns
698 -> (Sig RdrName -> Bool) -- Complain about the wrong kind of signature if this is False
701 -- Renames the signatures and performs error checks
702 renameSigs mb_names ok_sig sigs
703 = do { let (good_sigs, bad_sigs) = partition (ok_sig . unLoc) sigs
704 ; mapM_ unknownSigErr bad_sigs -- Misplaced
705 ; mapM_ dupSigDeclErr (findDupsEq eqHsSig sigs) -- Duplicate
706 ; sigs' <- mapM (wrapLocM (renameSig mb_names)) good_sigs
709 ----------------------
710 -- We use lookupSigOccRn in the signatures, which is a little bit unsatisfactory
711 -- because this won't work for:
712 -- instance Foo T where
715 -- We'll just rename the INLINE prag to refer to whatever other 'op'
716 -- is in scope. (I'm assuming that Baz.op isn't in scope unqualified.)
717 -- Doesn't seem worth much trouble to sort this.
719 renameSig :: Maybe NameSet -> Sig RdrName -> RnM (Sig Name)
720 -- FixitySig is renamed elsewhere.
721 renameSig _ (IdSig x)
722 = return (IdSig x) -- Actually this never occurs
723 renameSig mb_names sig@(TypeSig v ty)
724 = do { new_v <- lookupSigOccRn mb_names sig v
725 ; new_ty <- rnHsSigType (quotes (ppr v)) ty
726 ; return (TypeSig new_v new_ty) }
728 renameSig _ (SpecInstSig ty)
729 = do { new_ty <- rnLHsType (text "A SPECIALISE instance pragma") ty
730 ; return (SpecInstSig new_ty) }
732 renameSig mb_names sig@(SpecSig v ty inl)
733 = do { new_v <- lookupSigOccRn mb_names sig v
734 ; new_ty <- rnHsSigType (quotes (ppr v)) ty
735 ; return (SpecSig new_v new_ty inl) }
737 renameSig mb_names sig@(InlineSig v s)
738 = do { new_v <- lookupSigOccRn mb_names sig v
739 ; return (InlineSig new_v s) }
741 renameSig mb_names sig@(FixSig (FixitySig v f))
742 = do { new_v <- lookupSigOccRn mb_names sig v
743 ; return (FixSig (FixitySig new_v f)) }
747 %************************************************************************
751 %************************************************************************
754 rnMatchGroup :: HsMatchContext Name -> MatchGroup RdrName -> RnM (MatchGroup Name, FreeVars)
755 rnMatchGroup ctxt (MatchGroup ms _)
756 = do { (new_ms, ms_fvs) <- mapFvRn (rnMatch ctxt) ms
757 ; return (MatchGroup new_ms placeHolderType, ms_fvs) }
759 rnMatch :: HsMatchContext Name -> LMatch RdrName -> RnM (LMatch Name, FreeVars)
760 rnMatch ctxt = wrapLocFstM (rnMatch' ctxt)
762 rnMatch' :: HsMatchContext Name -> Match RdrName -> RnM (Match Name, FreeVars)
763 rnMatch' ctxt match@(Match pats maybe_rhs_sig grhss)
764 = do { -- Result type signatures are no longer supported
765 case maybe_rhs_sig of
767 Just ty -> addLocErr ty (resSigErr ctxt match)
770 -- Now the main event
771 -- note that there are no local ficity decls for matches
772 ; rnPatsAndThen_LocalRightwards ctxt pats $ \ pats' -> do
773 { (grhss', grhss_fvs) <- rnGRHSs ctxt grhss
775 ; return (Match pats' Nothing grhss', grhss_fvs) }}
776 -- The bindPatSigTyVarsFV and rnPatsAndThen will remove the bound FVs
779 resSigErr :: HsMatchContext Name -> Match RdrName -> HsType RdrName -> SDoc
780 resSigErr ctxt match ty
781 = vcat [ ptext (sLit "Illegal result type signature") <+> quotes (ppr ty)
782 , nest 2 $ ptext (sLit "Result signatures are no longer supported in pattern matches")
783 , pprMatchInCtxt ctxt match ]
787 %************************************************************************
789 \subsubsection{Guarded right-hand sides (GRHSs)}
791 %************************************************************************
794 rnGRHSs :: HsMatchContext Name -> GRHSs RdrName -> RnM (GRHSs Name, FreeVars)
796 rnGRHSs ctxt (GRHSs grhss binds)
797 = rnLocalBindsAndThen binds $ \ binds' -> do
798 (grhss', fvGRHSs) <- mapFvRn (rnGRHS ctxt) grhss
799 return (GRHSs grhss' binds', fvGRHSs)
801 rnGRHS :: HsMatchContext Name -> LGRHS RdrName -> RnM (LGRHS Name, FreeVars)
802 rnGRHS ctxt = wrapLocFstM (rnGRHS' ctxt)
804 rnGRHS' :: HsMatchContext Name -> GRHS RdrName -> RnM (GRHS Name, FreeVars)
805 rnGRHS' ctxt (GRHS guards rhs)
806 = do { pattern_guards_allowed <- doptM Opt_PatternGuards
807 ; ((guards', rhs'), fvs) <- rnStmts (PatGuard ctxt) guards $
810 ; unless (pattern_guards_allowed || is_standard_guard guards')
811 (addWarn (nonStdGuardErr guards'))
813 ; return (GRHS guards' rhs', fvs) }
815 -- Standard Haskell 1.4 guards are just a single boolean
816 -- expression, rather than a list of qualifiers as in the
818 is_standard_guard [] = True
819 is_standard_guard [L _ (ExprStmt _ _ _)] = True
820 is_standard_guard _ = False
823 %************************************************************************
825 \subsection{Error messages}
827 %************************************************************************
830 dupSigDeclErr :: [LSig RdrName] -> RnM ()
831 dupSigDeclErr sigs@(L loc sig : _)
833 vcat [ptext (sLit "Duplicate") <+> what_it_is <> colon,
834 nest 2 (vcat (map ppr_sig sigs))]
836 what_it_is = hsSigDoc sig
837 ppr_sig (L loc sig) = ppr loc <> colon <+> ppr sig
838 dupSigDeclErr [] = panic "dupSigDeclErr"
840 unknownSigErr :: LSig RdrName -> RnM ()
841 unknownSigErr (L loc sig)
843 sep [ptext (sLit "Misplaced") <+> hsSigDoc sig <> colon, ppr sig]
845 methodBindErr :: HsBindLR RdrName RdrName -> SDoc
847 = hang (ptext (sLit "Pattern bindings (except simple variables) not allowed in instance declarations"))
850 bindsInHsBootFile :: LHsBindsLR Name RdrName -> SDoc
851 bindsInHsBootFile mbinds
852 = hang (ptext (sLit "Bindings in hs-boot files are not allowed"))
855 nonStdGuardErr :: [LStmtLR Name Name] -> SDoc
856 nonStdGuardErr guards
857 = hang (ptext (sLit "accepting non-standard pattern guards (use -XPatternGuards to suppress this message)"))
858 4 (interpp'SP guards)