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