Improve free-variable handling for rnPat and friends (fixes Trac #1972)
[ghc-hetmet.git] / compiler / rename / RnBinds.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[RnBinds]{Renaming and dependency analysis of bindings}
5
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).
10
11 \begin{code}
12 {-# OPTIONS -w #-}
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
17 -- for details
18
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,
23                 makeMiniFixityEnv
24    ) where
25
26 #include "HsVersions.h"
27
28 import {-# SOURCE #-} RnExpr( rnLExpr, rnStmts )
29
30 import HsSyn
31 import RdrHsSyn
32 import RnHsSyn
33 import TcRnMonad
34 import RnTypes        ( rnHsSigType, rnLHsType, rnHsTypeFVs,checkPrecMatch)
35 import RnPat          (rnPatsAndThen_LocalRightwards, rnBindPat,
36                        NameMaker, localRecNameMaker, topRecNameMaker, applyNameMaker, 
37                        patSigErr)
38                       
39 import RnEnv            ( lookupLocatedBndrRn, 
40                           lookupInstDeclBndr, newIPNameRn,
41                           lookupLocatedSigOccRn, bindPatSigTyVarsFV,
42                           bindLocalFixities, bindSigTyVarsFV, 
43                           warnUnusedLocalBinds, mapFvRn, extendTyVarEnvFVRn,
44                           bindLocatedLocalsFV, bindLocalNames, bindLocalNamesFV,
45                           bindLocalNamesFV_WithFixities,
46                           bindLocatedLocalsRn,
47                           checkDupNames, checkShadowing
48                         )
49 import DynFlags ( DynFlag(..) )
50 import HscTypes         (FixItem(..))
51 import Name
52 import NameEnv
53 import UniqFM
54 import NameSet
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 )
61 import Bag
62 import Outputable
63 import Maybes           ( orElse )
64 import Util             ( filterOut )
65 import Monad            ( foldM )
66 \end{code}
67
68 -- ToDo: Put the annotations into the monad, so that they arrive in the proper
69 -- place and can be used when complaining.
70
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
74 \begin{verbatim}
75 f x = y where a = x
76               y = x
77 \end{verbatim}
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.
86
87 ToDo: deal with case where a single monobinds binds the same variable
88 twice.
89
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).
93
94
95 %************************************************************************
96 %*                                                                      *
97 %* naming conventions                                                   *
98 %*                                                                      *
99 %************************************************************************
100
101 \subsection[name-conventions]{Name conventions}
102
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.
109
110 Conventions for variable names are as follows:
111 \begin{itemize}
112 \item
113 new code is given a prime to distinguish it from the old.
114
115 \item
116 a set of variables defined in @Exp@ is written @dvExp@
117
118 \item
119 a set of variables free in @Exp@ is written @fvExp@
120 \end{itemize}
121
122 %************************************************************************
123 %*                                                                      *
124 %* analysing polymorphic bindings (HsBindGroup, HsBind)
125 %*                                                                      *
126 %************************************************************************
127
128 \subsubsection[dep-HsBinds]{Polymorphic bindings}
129
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.
134
135 Monomorphic bindings contain information that is returned in a tuple
136 (a @FlatMonoBinds@) containing:
137
138 \begin{enumerate}
139 \item
140 a unique @Int@ that serves as the ``vertex tag'' for this binding.
141
142 \item
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.
145
146 \item
147 the free variables of the body. These are referred to as @fvBody@.
148
149 \item
150 the definition's actual code. This is referred to as just @code@.
151 \end{enumerate}
152
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.
156
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.
162
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).
167
168 %************************************************************************
169 %*                                                                      *
170 \subsubsection{ Top-level bindings}
171 %*                                                                      *
172 %************************************************************************
173
174 \begin{code}
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
183
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
189        ; if is_boot 
190          then rnTopBindsBoot binds
191          else rnValBindsRHSGen (\x -> x) -- don't trim free vars
192                                bound_names binds }
193   
194
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
197 --
198 -- never used when there are fixity declarations
199 rnTopBinds :: HsValBinds RdrName 
200            -> RnM (HsValBinds Name, DefUses)
201 rnTopBinds b = 
202   do nl <- rnTopBindsLHS emptyUFM b
203      let bound_names = map unLoc (collectHsValBinders nl)
204      bindLocalNames bound_names  $ rnTopBindsRHS bound_names nl
205        
206
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')) }
214 \end{code}
215
216
217
218 %*********************************************************
219 %*                                                      *
220                 HsLocalBinds
221 %*                                                      *
222 %*********************************************************
223
224 \begin{code}
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
233
234 rnLocalBindsAndThen (HsValBinds val_binds) thing_inside
235   = rnValBindsAndThen val_binds $ \ val_binds' -> 
236       thing_inside (HsValBinds val_binds')
237
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)
242
243
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) }
247
248 rnIPBind (IPBind n expr)
249   = newIPNameRn  n              `thenM` \ name ->
250     rnLExpr expr                `thenM` \ (expr',fvExpr) ->
251     return (IPBind name expr', fvExpr)
252 \end{code}
253
254
255 %************************************************************************
256 %*                                                                      *
257                 ValBinds
258 %*                                                                      *
259 %************************************************************************
260
261 \begin{code}
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
271
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)
280
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      checkDupNames  doc boundNames
286      checkShadowing doc boundNames   
287
288      -- (Note that we don't want to do this at the top level, since
289      -- sorting out duplicates and shadowing there happens elsewhere.
290      -- The behavior is even different. For example,
291      --   import A(f)
292      --   f = ...
293      -- should not produce a shadowing warning (but it will produce
294      -- an ambiguity warning if you use f), but
295      --   import A(f)
296      --   g = let f = ... in f
297      -- should.
298      rnValBindsLHSFromDoc (localRecNameMaker fix_env) boundNames doc binds 
299
300 bindersAndDoc :: HsValBinds RdrName -> ([Located RdrName], SDoc)
301 bindersAndDoc binds = 
302     let
303         -- the unrenamed bndrs for error checking and reporting
304         orig = collectHsValBinders binds
305         doc = text "In the binding group for:" <+> pprWithCommas ppr (map unLoc orig)
306     in
307       (orig, doc)
308
309 -- renames the left-hand sides
310 -- generic version used both at the top level and for local binds
311 -- does some error checking, but not what gets done elsewhere at the top level
312 rnValBindsLHSFromDoc :: NameMaker 
313                      -> [Located RdrName] -- RdrNames of the LHS (so we don't have to gather them twice)
314                      -> SDoc              -- doc string for dup names and shadowing
315                      -> HsValBinds RdrName
316                      -> RnM (HsValBindsLR Name RdrName)
317 rnValBindsLHSFromDoc topP original_bndrs doc binds@(ValBindsIn mbinds sigs)
318  = do
319      -- rename the LHSes
320      mbinds' <- mapBagM (rnBindLHS topP doc) mbinds
321      return $ ValBindsIn mbinds' sigs
322
323 -- assumes the LHS vars are in scope
324 -- general version used both from the top-level and for local things
325 --
326 -- does not bind the local fixity declarations
327 rnValBindsRHSGen :: (FreeVars -> FreeVars)  -- for trimming free var sets
328                      -- The trimming function trims the free vars we attach to a
329                      -- binding so that it stays reasonably small
330                  -> [Name]  -- names bound by the LHSes
331                  -> HsValBindsLR Name RdrName
332                  -> RnM (HsValBinds Name, DefUses)
333
334 rnValBindsRHSGen trim bound_names binds@(ValBindsIn mbinds sigs)
335  = do -- rename the sigs
336    sigs' <- rename_sigs sigs
337    -- rename the RHSes
338    binds_w_dus <- mapBagM (rnBind (mkSigTvFn sigs') trim) mbinds
339    let (anal_binds, anal_dus) = depAnalBinds binds_w_dus
340        (valbind', valbind'_dus) = (ValBindsOut anal_binds sigs',
341                                    usesOnly (hsSigsFVs sigs') `plusDU` anal_dus)
342    -- We do the check-sigs after renaming the bindings,
343    -- so that we have convenient access to the binders
344    check_sigs (okBindSig (duDefs anal_dus)) sigs'                       
345    returnM (valbind', valbind'_dus)
346
347 -- wrapper for local binds
348 --
349 -- the *client* of this function is responsible for checking for unused binders;
350 -- it doesn't (and can't: we don't have the thing inside the binds) happen here
351 --
352 -- the client is also responsible for bringing the fixities into scope
353 rnValBindsRHS :: [Name]  -- names bound by the LHSes
354               -> HsValBindsLR Name RdrName
355               -> RnM (HsValBinds Name, DefUses)
356 rnValBindsRHS bound_names binds = 
357   rnValBindsRHSGen (\ fvs -> -- only keep the names the names from this group
358                     intersectNameSet (mkNameSet bound_names) fvs) bound_names binds
359
360
361 -- for local binds
362 -- wrapper that does both the left- and right-hand sides 
363 --
364 -- here there are no local fixity decls passed in;
365 -- the local fixity decls come from the ValBinds sigs
366 rnValBindsAndThen :: HsValBinds RdrName
367                   -> (HsValBinds Name -> RnM (result, FreeVars))
368                   -> RnM (result, FreeVars)
369 rnValBindsAndThen binds@(ValBindsIn _ sigs) thing_inside = 
370     let 
371        (original_bndrs, doc) = bindersAndDoc binds
372
373     in do
374       -- (A) create the local fixity environment 
375       new_fixities <- makeMiniFixityEnv [L loc sig | L loc (FixSig sig) <- sigs]
376
377       -- (B) rename the LHSes 
378       new_lhs <- rnValBindsLHSFromDoc_Local original_bndrs doc new_fixities binds
379       let bound_names = map unLoc $ collectHsValBinders new_lhs
380
381       --     and bring them (and their fixities) into scope
382       bindLocalNamesFV_WithFixities bound_names new_fixities $ 
383         warnUnusedLocalBinds bound_names $ do
384
385       -- (C) do the RHS and thing inside
386       (binds', dus) <- rnValBindsRHS bound_names new_lhs 
387       (result, result_fvs) <- thing_inside binds'
388
389       let 
390             -- the variables used in the val binds are: 
391             --   (1) the uses of the binds 
392             --   (2) the FVs of the thing-inside
393             all_uses = (duUses dus) `plusFV` result_fvs
394                 -- duUses: It's important to return all the uses.  Otherwise consider:
395                 --      x = 3
396                 --      y = let p = x in 'x'    -- NB: p not used
397                 -- If we don't "see" the dependency of 'y' on 'x', we may put the
398                 -- bindings in the wrong order, and the type checker will complain
399                 -- that x isn't in scope
400
401       return (result, 
402               -- the bound names are pruned out of all_uses
403               -- by the bindLocalNamesFV call above
404               all_uses)
405
406
407 -- Process the fixity declarations, making a FastString -> (Located Fixity) map
408 -- (We keep the location around for reporting duplicate fixity declarations.)
409 -- 
410 -- Checks for duplicates, but not that only locally defined things are fixed.
411 -- Note: for local fixity declarations, duplicates would also be checked in
412 --       check_sigs below.  But we also use this function at the top level.
413 makeMiniFixityEnv :: [LFixitySig RdrName]
414               -> RnM (UniqFM (Located Fixity)) -- key is the FastString of the OccName
415                                                -- of the fixity declaration it came from
416                                                
417 makeMiniFixityEnv decls = foldlM add_one emptyUFM decls
418  where
419    add_one env (L loc (FixitySig (L name_loc name) fixity)) = do
420      { -- this fixity decl is a duplicate iff
421        -- the ReaderName's OccName's FastString is already in the env
422        -- (we only need to check the local fix_env because
423        --  definitions of non-local will be caught elsewhere)
424        let {occ = rdrNameOcc name;
425             curKey = occNameFS occ;
426             fix_item = L loc fixity};
427
428        case lookupUFM env curKey of
429          Nothing -> return $ addToUFM env curKey fix_item
430          Just (L loc' _) -> do
431            { setSrcSpan loc $ 
432                         addLocErr (L name_loc name) (dupFixityDecl loc')
433            ; return env}
434      }
435
436 pprFixEnv :: NameEnv FixItem -> SDoc
437 pprFixEnv env 
438   = pprWithCommas (\ (FixItem n f) -> ppr f <+> ppr n)
439                   (nameEnvElts env)
440
441 dupFixityDecl loc rdr_name
442   = vcat [ptext SLIT("Multiple fixity declarations for") <+> quotes (ppr rdr_name),
443           ptext SLIT("also at ") <+> ppr loc]
444
445 ---------------------
446
447 -- renaming a single bind
448
449 rnBindLHS :: NameMaker
450           -> SDoc 
451           -> LHsBind RdrName
452           -- returns the renamed left-hand side,
453           -- and the FreeVars *of the LHS*
454           -- (i.e., any free variables of the pattern)
455           -> RnM (LHsBindLR Name RdrName)
456
457 rnBindLHS name_maker doc (L loc (PatBind { pat_lhs = pat, 
458                                            pat_rhs = grhss, 
459                                            bind_fvs=bind_fvs,
460                                            pat_rhs_ty=pat_rhs_ty
461                                          })) 
462   = setSrcSpan loc $ do
463       -- we don't actually use the FV processing of rnPatsAndThen here
464       (pat',pat'_fvs) <- rnBindPat name_maker pat
465       return (L loc (PatBind { pat_lhs = pat', 
466                                pat_rhs = grhss, 
467                                -- we temporarily store the pat's FVs here;
468                                -- gets updated to the FVs of the whole bind
469                                -- when doing the RHS below
470                                bind_fvs = pat'_fvs,
471                                -- these will get ignored in the next pass,
472                                -- when we rename the RHS
473                                pat_rhs_ty = pat_rhs_ty }))
474
475 rnBindLHS name_maker doc (L loc (FunBind { fun_id = name@(L nameLoc _), 
476                                            fun_infix = inf, 
477                                            fun_matches = matches,
478                                            fun_co_fn = fun_co_fn, 
479                                            bind_fvs = bind_fvs,
480                                            fun_tick = fun_tick
481                                          }))
482   = setSrcSpan loc $ 
483     do { (newname, _fvs) <- applyNameMaker name_maker name $ \ newname ->
484                             return (newname, emptyFVs) 
485        ; return (L loc (FunBind { fun_id = L nameLoc newname, 
486                                   fun_infix = inf, 
487                                   fun_matches = matches,
488                                   -- we temporatily store the LHS's FVs (empty in this case) here
489                                   -- gets updated when doing the RHS below
490                                   bind_fvs = emptyFVs,
491                                   -- everything else will get ignored in the next pass
492                                   fun_co_fn = fun_co_fn, 
493                                   fun_tick = fun_tick
494                                   })) }
495
496 -- assumes the left-hands-side vars are in scope
497 rnBind :: (Name -> [Name])              -- Signature tyvar function
498        -> (FreeVars -> FreeVars)        -- Trimming function for rhs free vars
499        -> LHsBindLR Name RdrName
500        -> RnM (LHsBind Name, [Name], Uses)
501 rnBind sig_fn trim (L loc (PatBind { pat_lhs = pat, 
502                                      pat_rhs = grhss, 
503                                      -- pat fvs were stored here while processing the LHS          
504                                      bind_fvs=pat_fvs }))
505   = setSrcSpan loc $ 
506     do  {let bndrs = collectPatBinders pat
507
508         ; (grhss', fvs) <- rnGRHSs PatBindRhs grhss
509                 -- No scoped type variables for pattern bindings
510
511         ; return (L loc (PatBind { pat_lhs = pat, 
512                                   pat_rhs = grhss', 
513                                      pat_rhs_ty = placeHolderType, 
514                                   bind_fvs = trim fvs }), 
515                   bndrs, pat_fvs `plusFV` fvs) }
516
517 rnBind sig_fn 
518        trim 
519        (L loc (FunBind { fun_id = name, 
520                          fun_infix = inf, 
521                          fun_matches = matches,
522                          -- no pattern FVs
523                          bind_fvs = _
524                        })) 
525        -- invariant: no free vars here when it's a FunBind
526   = setSrcSpan loc $ 
527     do  { let plain_name = unLoc name
528
529         ; (matches', fvs) <- bindSigTyVarsFV (sig_fn plain_name) $
530                                 -- bindSigTyVars tests for Opt_ScopedTyVars
531                              rnMatchGroup (FunRhs plain_name inf) matches
532
533         ; checkPrecMatch inf plain_name matches'
534
535         ; return (L loc (FunBind { fun_id = name, 
536                                   fun_infix = inf, 
537                                   fun_matches = matches',
538                                      bind_fvs = trim fvs, 
539                                   fun_co_fn = idHsWrapper, 
540                                   fun_tick = Nothing }), 
541                   [plain_name], fvs)
542       }
543                 
544 ---------------------
545 depAnalBinds :: Bag (LHsBind Name, [Name], Uses)
546              -> ([(RecFlag, LHsBinds Name)], DefUses)
547 -- Dependency analysis; this is important so that 
548 -- unused-binding reporting is accurate
549 depAnalBinds binds_w_dus
550   = (map get_binds sccs, map get_du sccs)
551   where
552     sccs = stronglyConnComp edges
553
554     keyd_nodes = bagToList binds_w_dus `zip` [0::Int ..]
555
556     edges = [ (node, key, [key | n <- nameSetToList uses,
557                                  Just key <- [lookupNameEnv key_map n] ])
558             | (node@(_,_,uses), key) <- keyd_nodes ]
559
560     key_map :: NameEnv Int      -- Which binding it comes from
561     key_map = mkNameEnv [(bndr, key) | ((_, bndrs, _), key) <- keyd_nodes
562                                      , bndr <- bndrs ]
563
564     get_binds (AcyclicSCC (bind, _, _)) = (NonRecursive, unitBag bind)
565     get_binds (CyclicSCC  binds_w_dus)  = (Recursive, listToBag [b | (b,d,u) <- binds_w_dus])
566
567     get_du (AcyclicSCC (_, bndrs, uses)) = (Just (mkNameSet bndrs), uses)
568     get_du (CyclicSCC  binds_w_dus)      = (Just defs, uses)
569         where
570           defs = mkNameSet [b | (_,bs,_) <- binds_w_dus, b <- bs]
571           uses = unionManyNameSets [u | (_,_,u) <- binds_w_dus]
572
573
574 ---------------------
575 -- Bind the top-level forall'd type variables in the sigs.
576 -- E.g  f :: a -> a
577 --      f = rhs
578 --      The 'a' scopes over the rhs
579 --
580 -- NB: there'll usually be just one (for a function binding)
581 --     but if there are many, one may shadow the rest; too bad!
582 --      e.g  x :: [a] -> [a]
583 --           y :: [(a,a)] -> a
584 --           (x,y) = e
585 --      In e, 'a' will be in scope, and it'll be the one from 'y'!
586
587 mkSigTvFn :: [LSig Name] -> (Name -> [Name])
588 -- Return a lookup function that maps an Id Name to the names
589 -- of the type variables that should scope over its body..
590 mkSigTvFn sigs
591   = \n -> lookupNameEnv env n `orElse` []
592   where
593     env :: NameEnv [Name]
594     env = mkNameEnv [ (name, map hsLTyVarName ltvs)
595                     | L _ (TypeSig (L _ name) 
596                                    (L _ (HsForAllTy Explicit ltvs _ _))) <- sigs]
597         -- Note the pattern-match on "Explicit"; we only bind
598         -- type variables from signatures with an explicit top-level for-all
599 \end{code}
600
601
602 @rnMethodBinds@ is used for the method bindings of a class and an instance
603 declaration.   Like @rnBinds@ but without dependency analysis.
604
605 NOTA BENE: we record each {\em binder} of a method-bind group as a free variable.
606 That's crucial when dealing with an instance decl:
607 \begin{verbatim}
608         instance Foo (T a) where
609            op x = ...
610 \end{verbatim}
611 This might be the {\em sole} occurrence of @op@ for an imported class @Foo@,
612 and unless @op@ occurs we won't treat the type signature of @op@ in the class
613 decl for @Foo@ as a source of instance-decl gates.  But we should!  Indeed,
614 in many ways the @op@ in an instance decl is just like an occurrence, not
615 a binder.
616
617 \begin{code}
618 rnMethodBinds :: Name                   -- Class name
619               -> (Name -> [Name])       -- Signature tyvar function
620               -> [Name]                 -- Names for generic type variables
621               -> LHsBinds RdrName
622               -> RnM (LHsBinds Name, FreeVars)
623
624 rnMethodBinds cls sig_fn gen_tyvars binds
625   = foldM do_one (emptyBag,emptyFVs) (bagToList binds)
626   where do_one (binds,fvs) bind = do
627            (bind', fvs_bind) <- rnMethodBind cls sig_fn gen_tyvars bind
628            return (bind' `unionBags` binds, fvs_bind `plusFV` fvs)
629
630 rnMethodBind cls sig_fn gen_tyvars (L loc (FunBind { fun_id = name, fun_infix = inf, 
631                                                      fun_matches = MatchGroup matches _ }))
632   = setSrcSpan loc $ 
633     lookupInstDeclBndr cls name                 `thenM` \ sel_name -> 
634     let plain_name = unLoc sel_name in
635         -- We use the selector name as the binder
636
637     bindSigTyVarsFV (sig_fn plain_name)                 $
638     mapFvRn (rn_match plain_name) matches               `thenM` \ (new_matches, fvs) ->
639     let 
640         new_group = MatchGroup new_matches placeHolderType
641     in
642     checkPrecMatch inf plain_name new_group             `thenM_`
643     returnM (unitBag (L loc (FunBind { 
644                                 fun_id = sel_name, fun_infix = inf, 
645                                 fun_matches = new_group,
646                                 bind_fvs = fvs, fun_co_fn = idHsWrapper,
647                                 fun_tick = Nothing })), 
648              fvs `addOneFV` plain_name)
649         -- The 'fvs' field isn't used for method binds
650   where
651         -- Truly gruesome; bring into scope the correct members of the generic 
652         -- type variables.  See comments in RnSource.rnSourceDecl(ClassDecl)
653     rn_match sel_name match@(L _ (Match (L _ (TypePat ty) : _) _ _))
654         = extendTyVarEnvFVRn gen_tvs    $
655           rnMatch (FunRhs sel_name inf) match
656         where
657           tvs     = map (rdrNameOcc.unLoc) (extractHsTyRdrTyVars ty)
658           gen_tvs = [tv | tv <- gen_tyvars, nameOccName tv `elem` tvs] 
659
660     rn_match sel_name match = rnMatch (FunRhs sel_name inf) match
661
662
663 -- Can't handle method pattern-bindings which bind multiple methods.
664 rnMethodBind cls sig_fn gen_tyvars mbind@(L loc (PatBind other_pat _ _ _))
665   = addLocErr mbind methodBindErr       `thenM_`
666     returnM (emptyBag, emptyFVs) 
667 \end{code}
668
669
670
671 %************************************************************************
672 %*                                                                      *
673 \subsubsection[dep-Sigs]{Signatures (and user-pragmas for values)}
674 %*                                                                      *
675 %************************************************************************
676
677 @renameSigs@ checks for:
678 \begin{enumerate}
679 \item more than one sig for one thing;
680 \item signatures given for things not bound here;
681 \item with suitably flaggery, that all top-level things have type signatures.
682 \end{enumerate}
683 %
684 At the moment we don't gather free-var info from the types in
685 signatures.  We'd only need this if we wanted to report unused tyvars.
686
687 \begin{code}
688 renameSigs :: (LSig Name -> Bool) -> [LSig RdrName] -> RnM [LSig Name]
689 -- Renames the signatures and performs error checks
690 renameSigs ok_sig sigs 
691   = do  { sigs' <- rename_sigs sigs
692         ; check_sigs ok_sig sigs'
693         ; return sigs' }
694
695 ----------------------
696 rename_sigs :: [LSig RdrName] -> RnM [LSig Name]
697 rename_sigs sigs = mappM (wrapLocM renameSig) sigs
698
699 ----------------------
700 check_sigs :: (LSig Name -> Bool) -> [LSig Name] -> RnM ()
701 -- Used for class and instance decls, as well as regular bindings
702 check_sigs ok_sig sigs 
703         -- Check for (a) duplicate signatures
704         --           (b) signatures for things not in this group
705   = do  { 
706         traceRn (text "SIGS" <+> ppr sigs)
707         ; mappM_ unknownSigErr (filter (not . ok_sig) sigs')
708         ; mappM_ dupSigDeclErr (findDupsEq eqHsSig sigs') }
709   where
710         -- Don't complain about an unbound name again
711     sigs' = filterOut bad_name sigs
712     bad_name sig = case sigName sig of
713                         Just n -> isUnboundName n
714                         other  -> False
715
716 -- We use lookupLocatedSigOccRn in the signatures, which is a little bit unsatisfactory
717 -- because this won't work for:
718 --      instance Foo T where
719 --        {-# INLINE op #-}
720 --        Baz.op = ...
721 -- We'll just rename the INLINE prag to refer to whatever other 'op'
722 -- is in scope.  (I'm assuming that Baz.op isn't in scope unqualified.)
723 -- Doesn't seem worth much trouble to sort this.
724
725 renameSig :: Sig RdrName -> RnM (Sig Name)
726 -- FixitSig is renamed elsewhere.
727 renameSig (TypeSig v ty)
728   = lookupLocatedSigOccRn v                     `thenM` \ new_v ->
729     rnHsSigType (quotes (ppr v)) ty             `thenM` \ new_ty ->
730     returnM (TypeSig new_v new_ty)
731
732 renameSig (SpecInstSig ty)
733   = rnLHsType (text "A SPECIALISE instance pragma") ty `thenM` \ new_ty ->
734     returnM (SpecInstSig new_ty)
735
736 renameSig (SpecSig v ty inl)
737   = lookupLocatedSigOccRn v             `thenM` \ new_v ->
738     rnHsSigType (quotes (ppr v)) ty     `thenM` \ new_ty ->
739     returnM (SpecSig new_v new_ty inl)
740
741 renameSig (InlineSig v s)
742   = lookupLocatedSigOccRn v             `thenM` \ new_v ->
743     returnM (InlineSig new_v s)
744
745 renameSig (FixSig (FixitySig v f))
746   = lookupLocatedSigOccRn v             `thenM` \ new_v ->
747     returnM (FixSig (FixitySig new_v f))
748 \end{code}
749
750
751 ************************************************************************
752 *                                                                       *
753 \subsection{Match}
754 *                                                                       *
755 ************************************************************************
756
757 \begin{code}
758 rnMatchGroup :: HsMatchContext Name -> MatchGroup RdrName -> RnM (MatchGroup Name, FreeVars)
759 rnMatchGroup ctxt (MatchGroup ms _)
760   = mapFvRn (rnMatch ctxt) ms   `thenM` \ (new_ms, ms_fvs) ->
761     returnM (MatchGroup new_ms placeHolderType, ms_fvs)
762
763 rnMatch :: HsMatchContext Name -> LMatch RdrName -> RnM (LMatch Name, FreeVars)
764 rnMatch ctxt  = wrapLocFstM (rnMatch' ctxt)
765
766 rnMatch' ctxt match@(Match pats maybe_rhs_sig grhss)
767   = 
768         -- Deal with the rhs type signature
769     bindPatSigTyVarsFV rhs_sig_tys      $ 
770     doptM Opt_PatternSignatures `thenM` \ opt_PatternSignatures ->
771     (case maybe_rhs_sig of
772         Nothing -> returnM (Nothing, emptyFVs)
773         Just ty | opt_PatternSignatures -> rnHsTypeFVs doc_sig ty       `thenM` \ (ty', ty_fvs) ->
774                                      returnM (Just ty', ty_fvs)
775                 | otherwise       -> addLocErr ty patSigErr     `thenM_`
776                                      returnM (Nothing, emptyFVs)
777     )                                   `thenM` \ (maybe_rhs_sig', ty_fvs) ->
778
779         -- Now the main event
780        -- note that there are no local ficity decls for matches
781     rnPatsAndThen_LocalRightwards ctxt pats     $ \ pats' ->
782     rnGRHSs ctxt grhss          `thenM` \ (grhss', grhss_fvs) ->
783
784     returnM (Match pats' maybe_rhs_sig' grhss', grhss_fvs `plusFV` ty_fvs)
785         -- The bindPatSigTyVarsFV and rnPatsAndThen will remove the bound FVs
786   where
787      rhs_sig_tys =  case maybe_rhs_sig of
788                         Nothing -> []
789                         Just ty -> [ty]
790      doc_sig = text "In a result type-signature"
791 \end{code}
792
793
794 %************************************************************************
795 %*                                                                      *
796 \subsubsection{Guarded right-hand sides (GRHSs)}
797 %*                                                                      *
798 %************************************************************************
799
800 \begin{code}
801 rnGRHSs :: HsMatchContext Name -> GRHSs RdrName -> RnM (GRHSs Name, FreeVars)
802
803 rnGRHSs ctxt (GRHSs grhss binds)
804   = rnLocalBindsAndThen binds   $ \ binds' ->
805     mapFvRn (rnGRHS ctxt) grhss `thenM` \ (grhss', fvGRHSs) ->
806     returnM (GRHSs grhss' binds', fvGRHSs)
807
808 rnGRHS :: HsMatchContext Name -> LGRHS RdrName -> RnM (LGRHS Name, FreeVars)
809 rnGRHS ctxt = wrapLocFstM (rnGRHS' ctxt)
810
811 rnGRHS' ctxt (GRHS guards rhs)
812   = do  { pattern_guards_allowed <- doptM Opt_PatternGuards
813         ; ((guards', rhs'), fvs) <- rnStmts (PatGuard ctxt) guards $
814                                     rnLExpr rhs
815
816         ; checkM (pattern_guards_allowed || is_standard_guard guards')
817                  (addWarn (nonStdGuardErr guards'))
818
819         ; return (GRHS guards' rhs', fvs) }
820   where
821         -- Standard Haskell 1.4 guards are just a single boolean
822         -- expression, rather than a list of qualifiers as in the
823         -- Glasgow extension
824     is_standard_guard []                     = True
825     is_standard_guard [L _ (ExprStmt _ _ _)] = True
826     is_standard_guard other                  = False
827 \end{code}
828
829 %************************************************************************
830 %*                                                                      *
831 \subsection{Error messages}
832 %*                                                                      *
833 %************************************************************************
834
835 \begin{code}
836 dupSigDeclErr sigs@(L loc sig : _)
837   = addErrAt loc $
838         vcat [ptext SLIT("Duplicate") <+> what_it_is <> colon,
839               nest 2 (vcat (map ppr_sig sigs))]
840   where
841     what_it_is = hsSigDoc sig
842     ppr_sig (L loc sig) = ppr loc <> colon <+> ppr sig
843
844 unknownSigErr (L loc sig)
845   = do  { mod <- getModule
846         ; addErrAt loc $
847                 vcat [sep [ptext SLIT("Misplaced") <+> what_it_is <> colon, ppr sig],
848                       extra_stuff mod sig] }
849   where
850     what_it_is = hsSigDoc sig
851     extra_stuff mod  (TypeSig (L _ n) _)
852         | nameIsLocalOrFrom mod n
853         = ptext SLIT("The type signature must be given where")
854                 <+> quotes (ppr n) <+> ptext SLIT("is declared")
855         | otherwise
856         = ptext SLIT("You cannot give a type signature for an imported value")
857
858     extra_stuff mod other = empty
859
860 methodBindErr mbind
861  =  hang (ptext SLIT("Pattern bindings (except simple variables) not allowed in instance declarations"))
862        2 (ppr mbind)
863
864 bindsInHsBootFile mbinds
865   = hang (ptext SLIT("Bindings in hs-boot files are not allowed"))
866        2 (ppr mbinds)
867
868 nonStdGuardErr guards
869   = hang (ptext SLIT("accepting non-standard pattern guards (use -XPatternGuards to suppress this message)"))
870        4 (interpp'SP guards)
871 \end{code}