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).
13 -- The above warning supression flag is a temporary kludge.
14 -- While working on this module you are encouraged to remove it and fix
15 -- any warnings in the module. See
16 -- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
19 module RnBinds (rnTopBinds, rnTopBindsLHS, rnTopBindsRHS, -- use these for top-level bindings
20 rnLocalBindsAndThen, rnValBindsLHS, rnValBindsRHS, -- or these for local bindings
21 rnMethodBinds, renameSigs, mkSigTvFn,
22 rnMatchGroup, rnGRHSs,
26 #include "HsVersions.h"
28 import {-# SOURCE #-} RnExpr( rnLExpr, rnStmts )
34 import RnTypes ( rnHsSigType, rnLHsType, rnHsTypeFVs,checkPrecMatch)
35 import RnPat (rnPatsAndThen_LocalRightwards, rnBindPat,
36 NameMaker, localRecNameMaker, topRecNameMaker, applyNameMaker,
39 import RnEnv ( lookupLocatedBndrRn,
40 lookupInstDeclBndr, newIPNameRn,
41 lookupLocatedSigOccRn, bindPatSigTyVarsFV,
42 bindLocalFixities, bindSigTyVarsFV,
43 warnUnusedLocalBinds, mapFvRn, extendTyVarEnvFVRn,
44 bindLocatedLocalsFV, bindLocalNames, bindLocalNamesFV,
45 bindLocalNamesFV_WithFixities,
47 checkDupAndShadowedRdrNames
49 import DynFlags ( DynFlag(..) )
50 import HscTypes (FixItem(..))
55 import PrelNames ( isUnboundName )
56 import RdrName ( RdrName, rdrNameOcc )
57 import SrcLoc ( Located(..), unLoc, noLoc )
58 import ListSetOps ( findDupsEq )
59 import BasicTypes ( RecFlag(..) )
60 import Digraph ( SCC(..), stronglyConnComp )
63 import Maybes ( orElse )
64 import Util ( filterOut )
65 import Monad ( foldM )
68 -- ToDo: Put the annotations into the monad, so that they arrive in the proper
69 -- place and can be used when complaining.
71 The code tree received by the function @rnBinds@ contains definitions
72 in where-clauses which are all apparently mutually recursive, but which may
73 not really depend upon each other. For example, in the top level program
78 the definitions of @a@ and @y@ do not depend on each other at all.
79 Unfortunately, the typechecker cannot always check such definitions.
80 \footnote{Mycroft, A. 1984. Polymorphic type schemes and recursive
81 definitions. In Proceedings of the International Symposium on Programming,
82 Toulouse, pp. 217-39. LNCS 167. Springer Verlag.}
83 However, the typechecker usually can check definitions in which only the
84 strongly connected components have been collected into recursive bindings.
85 This is precisely what the function @rnBinds@ does.
87 ToDo: deal with case where a single monobinds binds the same variable
90 The vertag tag is a unique @Int@; the tags only need to be unique
91 within one @MonoBinds@, so that unique-Int plumbing is done explicitly
92 (heavy monad machinery not needed).
95 %************************************************************************
97 %* naming conventions *
99 %************************************************************************
101 \subsection[name-conventions]{Name conventions}
103 The basic algorithm involves walking over the tree and returning a tuple
104 containing the new tree plus its free variables. Some functions, such
105 as those walking polymorphic bindings (HsBinds) and qualifier lists in
106 list comprehensions (@Quals@), return the variables bound in local
107 environments. These are then used to calculate the free variables of the
108 expression evaluated in these environments.
110 Conventions for variable names are as follows:
113 new code is given a prime to distinguish it from the old.
116 a set of variables defined in @Exp@ is written @dvExp@
119 a set of variables free in @Exp@ is written @fvExp@
122 %************************************************************************
124 %* analysing polymorphic bindings (HsBindGroup, HsBind)
126 %************************************************************************
128 \subsubsection[dep-HsBinds]{Polymorphic bindings}
130 Non-recursive expressions are reconstructed without any changes at top
131 level, although their component expressions may have to be altered.
132 However, non-recursive expressions are currently not expected as
133 \Haskell{} programs, and this code should not be executed.
135 Monomorphic bindings contain information that is returned in a tuple
136 (a @FlatMonoBinds@) containing:
140 a unique @Int@ that serves as the ``vertex tag'' for this binding.
143 the name of a function or the names in a pattern. These are a set
144 referred to as @dvLhs@, the defined variables of the left hand side.
147 the free variables of the body. These are referred to as @fvBody@.
150 the definition's actual code. This is referred to as just @code@.
153 The function @nonRecDvFv@ returns two sets of variables. The first is
154 the set of variables defined in the set of monomorphic bindings, while the
155 second is the set of free variables in those bindings.
157 The set of variables defined in a non-recursive binding is just the
158 union of all of them, as @union@ removes duplicates. However, the
159 free variables in each successive set of cumulative bindings is the
160 union of those in the previous set plus those of the newest binding after
161 the defined variables of the previous set have been removed.
163 @rnMethodBinds@ deals only with the declarations in class and
164 instance declarations. It expects only to see @FunMonoBind@s, and
165 it expects the global environment to contain bindings for the binders
166 (which are all class operations).
168 %************************************************************************
170 \subsubsection{ Top-level bindings}
172 %************************************************************************
175 -- for top-level bindings, we need to make top-level names,
176 -- so we have a different entry point than for local bindings
177 rnTopBindsLHS :: UniqFM (Located Fixity) -- mini fixity env for the names we're about to bind
178 -- these fixities need to be brought into scope with the names
179 -> HsValBinds RdrName
180 -> RnM (HsValBindsLR Name RdrName)
181 rnTopBindsLHS fix_env binds =
182 (uncurry $ rnValBindsLHSFromDoc (topRecNameMaker fix_env)) (bindersAndDoc binds) binds
184 rnTopBindsRHS :: [Name] -- the names bound by these binds
185 -> HsValBindsLR Name RdrName
186 -> RnM (HsValBinds Name, DefUses)
187 rnTopBindsRHS bound_names binds =
188 do { is_boot <- tcIsHsBoot
190 then rnTopBindsBoot binds
191 else rnValBindsRHSGen (\x -> x) -- don't trim free vars
195 -- wrapper if we don't need to do anything in between the left and right,
196 -- or anything else in the scope of the left
198 -- never used when there are fixity declarations
199 rnTopBinds :: HsValBinds RdrName
200 -> RnM (HsValBinds Name, DefUses)
202 do nl <- rnTopBindsLHS emptyUFM b
203 let bound_names = map unLoc (collectHsValBinders nl)
204 bindLocalNames bound_names $ rnTopBindsRHS bound_names nl
207 rnTopBindsBoot :: HsValBindsLR Name RdrName -> RnM (HsValBinds Name, DefUses)
208 -- A hs-boot file has no bindings.
209 -- Return a single HsBindGroup with empty binds and renamed signatures
210 rnTopBindsBoot (ValBindsIn mbinds sigs)
211 = do { checkErr (isEmptyLHsBinds mbinds) (bindsInHsBootFile mbinds)
212 ; sigs' <- renameSigs okHsBootSig sigs
213 ; return (ValBindsOut [] sigs', usesOnly (hsSigsFVs sigs')) }
218 %*********************************************************
222 %*********************************************************
225 rnLocalBindsAndThen :: HsLocalBinds RdrName
226 -> (HsLocalBinds Name -> RnM (result, FreeVars))
227 -> RnM (result, FreeVars)
228 -- This version (a) assumes that the binding vars are *not* already in scope
229 -- (b) removes the binders from the free vars of the thing inside
230 -- The parser doesn't produce ThenBinds
231 rnLocalBindsAndThen EmptyLocalBinds thing_inside
232 = thing_inside EmptyLocalBinds
234 rnLocalBindsAndThen (HsValBinds val_binds) thing_inside
235 = rnValBindsAndThen val_binds $ \ val_binds' ->
236 thing_inside (HsValBinds val_binds')
238 rnLocalBindsAndThen (HsIPBinds binds) thing_inside
239 = rnIPBinds binds `thenM` \ (binds',fv_binds) ->
240 thing_inside (HsIPBinds binds') `thenM` \ (thing, fvs_thing) ->
241 returnM (thing, fvs_thing `plusFV` fv_binds)
244 rnIPBinds (IPBinds ip_binds _no_dict_binds)
245 = do { (ip_binds', fvs_s) <- mapAndUnzipM (wrapLocFstM rnIPBind) ip_binds
246 ; return (IPBinds ip_binds' emptyLHsBinds, plusFVs fvs_s) }
248 rnIPBind (IPBind n expr)
249 = newIPNameRn n `thenM` \ name ->
250 rnLExpr expr `thenM` \ (expr',fvExpr) ->
251 return (IPBind name expr', fvExpr)
255 %************************************************************************
259 %************************************************************************
262 -- wrapper for local binds
263 -- creates the documentation info and calls the helper below
264 rnValBindsLHS :: UniqFM (Located Fixity) -- mini fixity env for the names we're about to bind
265 -- these fixities need to be brought into scope with the names
266 -> HsValBinds RdrName
267 -> RnM (HsValBindsLR Name RdrName)
268 rnValBindsLHS fix_env binds =
269 let (boundNames,doc) = bindersAndDoc binds
270 in rnValBindsLHSFromDoc_Local boundNames doc fix_env binds
272 -- a helper used for local binds that does the duplicates check,
273 -- just so we don't forget to do it somewhere
274 rnValBindsLHSFromDoc_Local :: [Located RdrName] -- RdrNames of the LHS (so we don't have to gather them twice)
275 -> SDoc -- doc string for dup names and shadowing
276 -> UniqFM (Located Fixity) -- mini fixity env for the names we're about to bind
277 -- these fixities need to be brought into scope with the names
278 -> HsValBinds RdrName
279 -> RnM (HsValBindsLR Name RdrName)
281 rnValBindsLHSFromDoc_Local boundNames doc fix_env binds = do
282 -- Do error checking: we need to check for dups here because we
283 -- don't don't bind all of the variables from the ValBinds at once
284 -- with bindLocatedLocals any more.
285 checkDupAndShadowedRdrNames doc boundNames
287 -- (Note that we don't want to do this at the top level, since
288 -- sorting out duplicates and shadowing there happens elsewhere.
289 -- The behavior is even different. For example,
292 -- should not produce a shadowing warning (but it will produce
293 -- an ambiguity warning if you use f), but
295 -- g = let f = ... in f
297 rnValBindsLHSFromDoc (localRecNameMaker fix_env) boundNames doc binds
299 bindersAndDoc :: HsValBinds RdrName -> ([Located RdrName], SDoc)
300 bindersAndDoc binds =
302 -- the unrenamed bndrs for error checking and reporting
303 orig = collectHsValBinders binds
304 doc = text "In the binding group for:" <+> pprWithCommas ppr (map unLoc orig)
308 -- renames the left-hand sides
309 -- generic version used both at the top level and for local binds
310 -- does some error checking, but not what gets done elsewhere at the top level
311 rnValBindsLHSFromDoc :: NameMaker
312 -> [Located RdrName] -- RdrNames of the LHS (so we don't have to gather them twice)
313 -> SDoc -- doc string for dup names and shadowing
314 -> HsValBinds RdrName
315 -> RnM (HsValBindsLR Name RdrName)
316 rnValBindsLHSFromDoc topP original_bndrs doc binds@(ValBindsIn mbinds sigs)
319 mbinds' <- mapBagM (rnBindLHS topP doc) mbinds
320 return $ ValBindsIn mbinds' sigs
322 -- assumes the LHS vars are in scope
323 -- general version used both from the top-level and for local things
325 -- does not bind the local fixity declarations
326 rnValBindsRHSGen :: (FreeVars -> FreeVars) -- for trimming free var sets
327 -- The trimming function trims the free vars we attach to a
328 -- binding so that it stays reasonably small
329 -> [Name] -- names bound by the LHSes
330 -> HsValBindsLR Name RdrName
331 -> RnM (HsValBinds Name, DefUses)
333 rnValBindsRHSGen trim bound_names binds@(ValBindsIn mbinds sigs)
334 = do -- rename the sigs
335 sigs' <- rename_sigs sigs
337 binds_w_dus <- mapBagM (rnBind (mkSigTvFn sigs') trim) mbinds
338 let (anal_binds, anal_dus) = depAnalBinds binds_w_dus
339 (valbind', valbind'_dus) = (ValBindsOut anal_binds sigs',
340 usesOnly (hsSigsFVs sigs') `plusDU` anal_dus)
341 -- We do the check-sigs after renaming the bindings,
342 -- so that we have convenient access to the binders
343 check_sigs (okBindSig (duDefs anal_dus)) sigs'
344 returnM (valbind', valbind'_dus)
346 -- wrapper for local binds
348 -- the *client* of this function is responsible for checking for unused binders;
349 -- it doesn't (and can't: we don't have the thing inside the binds) happen here
351 -- the client is also responsible for bringing the fixities into scope
352 rnValBindsRHS :: [Name] -- names bound by the LHSes
353 -> HsValBindsLR Name RdrName
354 -> RnM (HsValBinds Name, DefUses)
355 rnValBindsRHS bound_names binds =
356 rnValBindsRHSGen (\ fvs -> -- only keep the names the names from this group
357 intersectNameSet (mkNameSet bound_names) fvs) bound_names binds
361 -- wrapper that does both the left- and right-hand sides
363 -- here there are no local fixity decls passed in;
364 -- the local fixity decls come from the ValBinds sigs
365 rnValBindsAndThen :: HsValBinds RdrName
366 -> (HsValBinds Name -> RnM (result, FreeVars))
367 -> RnM (result, FreeVars)
368 rnValBindsAndThen binds@(ValBindsIn _ sigs) thing_inside =
370 (original_bndrs, doc) = bindersAndDoc binds
373 -- (A) create the local fixity environment
374 new_fixities <- makeMiniFixityEnv [L loc sig | L loc (FixSig sig) <- sigs]
376 -- (B) rename the LHSes
377 new_lhs <- rnValBindsLHSFromDoc_Local original_bndrs doc new_fixities binds
378 let bound_names = map unLoc $ collectHsValBinders new_lhs
380 -- and bring them (and their fixities) into scope
381 bindLocalNamesFV_WithFixities bound_names new_fixities $
382 warnUnusedLocalBinds bound_names $ do
384 -- (C) do the RHS and thing inside
385 (binds', dus) <- rnValBindsRHS bound_names new_lhs
386 (result, result_fvs) <- thing_inside binds'
389 -- the variables used in the val binds are:
390 -- (1) the uses of the binds
391 -- (2) the FVs of the thing-inside
392 all_uses = (duUses dus) `plusFV` result_fvs
393 -- duUses: It's important to return all the uses. Otherwise consider:
395 -- y = let p = x in 'x' -- NB: p not used
396 -- If we don't "see" the dependency of 'y' on 'x', we may put the
397 -- bindings in the wrong order, and the type checker will complain
398 -- that x isn't in scope
401 -- the bound names are pruned out of all_uses
402 -- by the bindLocalNamesFV call above
406 -- Process the fixity declarations, making a FastString -> (Located Fixity) map
407 -- (We keep the location around for reporting duplicate fixity declarations.)
409 -- Checks for duplicates, but not that only locally defined things are fixed.
410 -- Note: for local fixity declarations, duplicates would also be checked in
411 -- check_sigs below. But we also use this function at the top level.
412 makeMiniFixityEnv :: [LFixitySig RdrName]
413 -> RnM (UniqFM (Located Fixity)) -- key is the FastString of the OccName
414 -- of the fixity declaration it came from
416 makeMiniFixityEnv decls = foldlM add_one emptyUFM decls
418 add_one env (L loc (FixitySig (L name_loc name) fixity)) = do
419 { -- this fixity decl is a duplicate iff
420 -- the ReaderName's OccName's FastString is already in the env
421 -- (we only need to check the local fix_env because
422 -- definitions of non-local will be caught elsewhere)
423 let {occ = rdrNameOcc name;
424 curKey = occNameFS occ;
425 fix_item = L loc fixity};
427 case lookupUFM env curKey of
428 Nothing -> return $ addToUFM env curKey fix_item
429 Just (L loc' _) -> do
431 addLocErr (L name_loc name) (dupFixityDecl loc')
435 pprFixEnv :: NameEnv FixItem -> SDoc
437 = pprWithCommas (\ (FixItem n f) -> ppr f <+> ppr n)
440 dupFixityDecl loc rdr_name
441 = vcat [ptext SLIT("Multiple fixity declarations for") <+> quotes (ppr rdr_name),
442 ptext SLIT("also at ") <+> ppr loc]
444 ---------------------
446 -- renaming a single bind
448 rnBindLHS :: NameMaker
451 -- returns the renamed left-hand side,
452 -- and the FreeVars *of the LHS*
453 -- (i.e., any free variables of the pattern)
454 -> RnM (LHsBindLR Name RdrName)
456 rnBindLHS name_maker doc (L loc (PatBind { pat_lhs = pat,
459 pat_rhs_ty=pat_rhs_ty
461 = setSrcSpan loc $ do
462 -- we don't actually use the FV processing of rnPatsAndThen here
463 (pat',pat'_fvs) <- rnBindPat name_maker pat
464 return (L loc (PatBind { pat_lhs = pat',
466 -- we temporarily store the pat's FVs here;
467 -- gets updated to the FVs of the whole bind
468 -- when doing the RHS below
470 -- these will get ignored in the next pass,
471 -- when we rename the RHS
472 pat_rhs_ty = pat_rhs_ty }))
474 rnBindLHS name_maker doc (L loc (FunBind { fun_id = name@(L nameLoc _),
476 fun_matches = matches,
477 fun_co_fn = fun_co_fn,
482 do { (newname, _fvs) <- applyNameMaker name_maker name $ \ newname ->
483 return (newname, emptyFVs)
484 ; return (L loc (FunBind { fun_id = L nameLoc newname,
486 fun_matches = matches,
487 -- we temporatily store the LHS's FVs (empty in this case) here
488 -- gets updated when doing the RHS below
490 -- everything else will get ignored in the next pass
491 fun_co_fn = fun_co_fn,
495 -- assumes the left-hands-side vars are in scope
496 rnBind :: (Name -> [Name]) -- Signature tyvar function
497 -> (FreeVars -> FreeVars) -- Trimming function for rhs free vars
498 -> LHsBindLR Name RdrName
499 -> RnM (LHsBind Name, [Name], Uses)
500 rnBind sig_fn trim (L loc (PatBind { pat_lhs = pat,
502 -- pat fvs were stored here while processing the LHS
505 do {let bndrs = collectPatBinders pat
507 ; (grhss', fvs) <- rnGRHSs PatBindRhs grhss
508 -- No scoped type variables for pattern bindings
510 ; return (L loc (PatBind { pat_lhs = pat,
512 pat_rhs_ty = placeHolderType,
513 bind_fvs = trim fvs }),
514 bndrs, pat_fvs `plusFV` fvs) }
518 (L loc (FunBind { fun_id = name,
520 fun_matches = matches,
524 -- invariant: no free vars here when it's a FunBind
526 do { let plain_name = unLoc name
528 ; (matches', fvs) <- bindSigTyVarsFV (sig_fn plain_name) $
529 -- bindSigTyVars tests for Opt_ScopedTyVars
530 rnMatchGroup (FunRhs plain_name inf) matches
532 ; checkPrecMatch inf plain_name matches'
534 ; return (L loc (FunBind { fun_id = name,
536 fun_matches = matches',
538 fun_co_fn = idHsWrapper,
539 fun_tick = Nothing }),
543 ---------------------
544 depAnalBinds :: Bag (LHsBind Name, [Name], Uses)
545 -> ([(RecFlag, LHsBinds Name)], DefUses)
546 -- Dependency analysis; this is important so that
547 -- unused-binding reporting is accurate
548 depAnalBinds binds_w_dus
549 = (map get_binds sccs, map get_du sccs)
551 sccs = stronglyConnComp edges
553 keyd_nodes = bagToList binds_w_dus `zip` [0::Int ..]
555 edges = [ (node, key, [key | n <- nameSetToList uses,
556 Just key <- [lookupNameEnv key_map n] ])
557 | (node@(_,_,uses), key) <- keyd_nodes ]
559 key_map :: NameEnv Int -- Which binding it comes from
560 key_map = mkNameEnv [(bndr, key) | ((_, bndrs, _), key) <- keyd_nodes
563 get_binds (AcyclicSCC (bind, _, _)) = (NonRecursive, unitBag bind)
564 get_binds (CyclicSCC binds_w_dus) = (Recursive, listToBag [b | (b,d,u) <- binds_w_dus])
566 get_du (AcyclicSCC (_, bndrs, uses)) = (Just (mkNameSet bndrs), uses)
567 get_du (CyclicSCC binds_w_dus) = (Just defs, uses)
569 defs = mkNameSet [b | (_,bs,_) <- binds_w_dus, b <- bs]
570 uses = unionManyNameSets [u | (_,_,u) <- binds_w_dus]
573 ---------------------
574 -- Bind the top-level forall'd type variables in the sigs.
577 -- The 'a' scopes over the rhs
579 -- NB: there'll usually be just one (for a function binding)
580 -- but if there are many, one may shadow the rest; too bad!
581 -- e.g x :: [a] -> [a]
584 -- In e, 'a' will be in scope, and it'll be the one from 'y'!
586 mkSigTvFn :: [LSig Name] -> (Name -> [Name])
587 -- Return a lookup function that maps an Id Name to the names
588 -- of the type variables that should scope over its body..
590 = \n -> lookupNameEnv env n `orElse` []
592 env :: NameEnv [Name]
593 env = mkNameEnv [ (name, map hsLTyVarName ltvs)
594 | L _ (TypeSig (L _ name)
595 (L _ (HsForAllTy Explicit ltvs _ _))) <- sigs]
596 -- Note the pattern-match on "Explicit"; we only bind
597 -- type variables from signatures with an explicit top-level for-all
601 @rnMethodBinds@ is used for the method bindings of a class and an instance
602 declaration. Like @rnBinds@ but without dependency analysis.
604 NOTA BENE: we record each {\em binder} of a method-bind group as a free variable.
605 That's crucial when dealing with an instance decl:
607 instance Foo (T a) where
610 This might be the {\em sole} occurrence of @op@ for an imported class @Foo@,
611 and unless @op@ occurs we won't treat the type signature of @op@ in the class
612 decl for @Foo@ as a source of instance-decl gates. But we should! Indeed,
613 in many ways the @op@ in an instance decl is just like an occurrence, not
617 rnMethodBinds :: Name -- Class name
618 -> (Name -> [Name]) -- Signature tyvar function
619 -> [Name] -- Names for generic type variables
621 -> RnM (LHsBinds Name, FreeVars)
623 rnMethodBinds cls sig_fn gen_tyvars binds
624 = foldM do_one (emptyBag,emptyFVs) (bagToList binds)
625 where do_one (binds,fvs) bind = do
626 (bind', fvs_bind) <- rnMethodBind cls sig_fn gen_tyvars bind
627 return (bind' `unionBags` binds, fvs_bind `plusFV` fvs)
629 rnMethodBind cls sig_fn gen_tyvars (L loc (FunBind { fun_id = name, fun_infix = inf,
630 fun_matches = MatchGroup matches _ }))
632 lookupInstDeclBndr cls name `thenM` \ sel_name ->
633 let plain_name = unLoc sel_name in
634 -- We use the selector name as the binder
636 bindSigTyVarsFV (sig_fn plain_name) $
637 mapFvRn (rn_match plain_name) matches `thenM` \ (new_matches, fvs) ->
639 new_group = MatchGroup new_matches placeHolderType
641 checkPrecMatch inf plain_name new_group `thenM_`
642 returnM (unitBag (L loc (FunBind {
643 fun_id = sel_name, fun_infix = inf,
644 fun_matches = new_group,
645 bind_fvs = fvs, fun_co_fn = idHsWrapper,
646 fun_tick = Nothing })),
647 fvs `addOneFV` plain_name)
648 -- The 'fvs' field isn't used for method binds
650 -- Truly gruesome; bring into scope the correct members of the generic
651 -- type variables. See comments in RnSource.rnSourceDecl(ClassDecl)
652 rn_match sel_name match@(L _ (Match (L _ (TypePat ty) : _) _ _))
653 = extendTyVarEnvFVRn gen_tvs $
654 rnMatch (FunRhs sel_name inf) match
656 tvs = map (rdrNameOcc.unLoc) (extractHsTyRdrTyVars ty)
657 gen_tvs = [tv | tv <- gen_tyvars, nameOccName tv `elem` tvs]
659 rn_match sel_name match = rnMatch (FunRhs sel_name inf) match
662 -- Can't handle method pattern-bindings which bind multiple methods.
663 rnMethodBind cls sig_fn gen_tyvars mbind@(L loc (PatBind other_pat _ _ _))
664 = addLocErr mbind methodBindErr `thenM_`
665 returnM (emptyBag, emptyFVs)
670 %************************************************************************
672 \subsubsection[dep-Sigs]{Signatures (and user-pragmas for values)}
674 %************************************************************************
676 @renameSigs@ checks for:
678 \item more than one sig for one thing;
679 \item signatures given for things not bound here;
680 \item with suitably flaggery, that all top-level things have type signatures.
683 At the moment we don't gather free-var info from the types in
684 signatures. We'd only need this if we wanted to report unused tyvars.
687 renameSigs :: (LSig Name -> Bool) -> [LSig RdrName] -> RnM [LSig Name]
688 -- Renames the signatures and performs error checks
689 renameSigs ok_sig sigs
690 = do { sigs' <- rename_sigs sigs
691 ; check_sigs ok_sig sigs'
694 ----------------------
695 rename_sigs :: [LSig RdrName] -> RnM [LSig Name]
696 rename_sigs sigs = mappM (wrapLocM renameSig) sigs
698 ----------------------
699 check_sigs :: (LSig Name -> Bool) -> [LSig Name] -> RnM ()
700 -- Used for class and instance decls, as well as regular bindings
701 check_sigs ok_sig sigs
702 -- Check for (a) duplicate signatures
703 -- (b) signatures for things not in this group
705 traceRn (text "SIGS" <+> ppr sigs)
706 ; mappM_ unknownSigErr (filter (not . ok_sig) sigs')
707 ; mappM_ dupSigDeclErr (findDupsEq eqHsSig sigs') }
709 -- Don't complain about an unbound name again
710 sigs' = filterOut bad_name sigs
711 bad_name sig = case sigName sig of
712 Just n -> isUnboundName n
715 -- We use lookupLocatedSigOccRn in the signatures, which is a little bit unsatisfactory
716 -- because this won't work for:
717 -- instance Foo T where
720 -- We'll just rename the INLINE prag to refer to whatever other 'op'
721 -- is in scope. (I'm assuming that Baz.op isn't in scope unqualified.)
722 -- Doesn't seem worth much trouble to sort this.
724 renameSig :: Sig RdrName -> RnM (Sig Name)
725 -- FixitSig is renamed elsewhere.
726 renameSig (TypeSig v ty)
727 = lookupLocatedSigOccRn v `thenM` \ new_v ->
728 rnHsSigType (quotes (ppr v)) ty `thenM` \ new_ty ->
729 returnM (TypeSig new_v new_ty)
731 renameSig (SpecInstSig ty)
732 = rnLHsType (text "A SPECIALISE instance pragma") ty `thenM` \ new_ty ->
733 returnM (SpecInstSig new_ty)
735 renameSig (SpecSig v ty inl)
736 = lookupLocatedSigOccRn v `thenM` \ new_v ->
737 rnHsSigType (quotes (ppr v)) ty `thenM` \ new_ty ->
738 returnM (SpecSig new_v new_ty inl)
740 renameSig (InlineSig v s)
741 = lookupLocatedSigOccRn v `thenM` \ new_v ->
742 returnM (InlineSig new_v s)
744 renameSig (FixSig (FixitySig v f))
745 = lookupLocatedSigOccRn v `thenM` \ new_v ->
746 returnM (FixSig (FixitySig new_v f))
750 ************************************************************************
754 ************************************************************************
757 rnMatchGroup :: HsMatchContext Name -> MatchGroup RdrName -> RnM (MatchGroup Name, FreeVars)
758 rnMatchGroup ctxt (MatchGroup ms _)
759 = mapFvRn (rnMatch ctxt) ms `thenM` \ (new_ms, ms_fvs) ->
760 returnM (MatchGroup new_ms placeHolderType, ms_fvs)
762 rnMatch :: HsMatchContext Name -> LMatch RdrName -> RnM (LMatch Name, FreeVars)
763 rnMatch ctxt = wrapLocFstM (rnMatch' ctxt)
765 rnMatch' ctxt match@(Match pats maybe_rhs_sig grhss)
767 -- Deal with the rhs type signature
768 bindPatSigTyVarsFV rhs_sig_tys $
769 doptM Opt_PatternSignatures `thenM` \ opt_PatternSignatures ->
770 (case maybe_rhs_sig of
771 Nothing -> returnM (Nothing, emptyFVs)
772 Just ty | opt_PatternSignatures -> rnHsTypeFVs doc_sig ty `thenM` \ (ty', ty_fvs) ->
773 returnM (Just ty', ty_fvs)
774 | otherwise -> addLocErr ty patSigErr `thenM_`
775 returnM (Nothing, emptyFVs)
776 ) `thenM` \ (maybe_rhs_sig', ty_fvs) ->
778 -- Now the main event
779 -- note that there are no local ficity decls for matches
780 rnPatsAndThen_LocalRightwards ctxt pats $ \ pats' ->
781 rnGRHSs ctxt grhss `thenM` \ (grhss', grhss_fvs) ->
783 returnM (Match pats' maybe_rhs_sig' grhss', grhss_fvs `plusFV` ty_fvs)
784 -- The bindPatSigTyVarsFV and rnPatsAndThen will remove the bound FVs
786 rhs_sig_tys = case maybe_rhs_sig of
789 doc_sig = text "In a result type-signature"
793 %************************************************************************
795 \subsubsection{Guarded right-hand sides (GRHSs)}
797 %************************************************************************
800 rnGRHSs :: HsMatchContext Name -> GRHSs RdrName -> RnM (GRHSs Name, FreeVars)
802 rnGRHSs ctxt (GRHSs grhss binds)
803 = rnLocalBindsAndThen binds $ \ binds' ->
804 mapFvRn (rnGRHS ctxt) grhss `thenM` \ (grhss', fvGRHSs) ->
805 returnM (GRHSs grhss' binds', fvGRHSs)
807 rnGRHS :: HsMatchContext Name -> LGRHS RdrName -> RnM (LGRHS Name, FreeVars)
808 rnGRHS ctxt = wrapLocFstM (rnGRHS' ctxt)
810 rnGRHS' ctxt (GRHS guards rhs)
811 = do { pattern_guards_allowed <- doptM Opt_PatternGuards
812 ; ((guards', rhs'), fvs) <- rnStmts (PatGuard ctxt) guards $
815 ; checkM (pattern_guards_allowed || is_standard_guard guards')
816 (addWarn (nonStdGuardErr guards'))
818 ; return (GRHS guards' rhs', fvs) }
820 -- Standard Haskell 1.4 guards are just a single boolean
821 -- expression, rather than a list of qualifiers as in the
823 is_standard_guard [] = True
824 is_standard_guard [L _ (ExprStmt _ _ _)] = True
825 is_standard_guard other = False
828 %************************************************************************
830 \subsection{Error messages}
832 %************************************************************************
835 dupSigDeclErr sigs@(L loc sig : _)
837 vcat [ptext SLIT("Duplicate") <+> what_it_is <> colon,
838 nest 2 (vcat (map ppr_sig sigs))]
840 what_it_is = hsSigDoc sig
841 ppr_sig (L loc sig) = ppr loc <> colon <+> ppr sig
843 unknownSigErr (L loc sig)
844 = do { mod <- getModule
846 vcat [sep [ptext SLIT("Misplaced") <+> what_it_is <> colon, ppr sig],
847 extra_stuff mod sig] }
849 what_it_is = hsSigDoc sig
850 extra_stuff mod (TypeSig (L _ n) _)
851 | nameIsLocalOrFrom mod n
852 = ptext SLIT("The type signature must be given where")
853 <+> quotes (ppr n) <+> ptext SLIT("is declared")
855 = ptext SLIT("You cannot give a type signature for an imported value")
857 extra_stuff mod other = empty
860 = hang (ptext SLIT("Pattern bindings (except simple variables) not allowed in instance declarations"))
863 bindsInHsBootFile mbinds
864 = hang (ptext SLIT("Bindings in hs-boot files are not allowed"))
867 nonStdGuardErr guards
868 = hang (ptext SLIT("accepting non-standard pattern guards (use -XPatternGuards to suppress this message)"))
869 4 (interpp'SP guards)