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