2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section[RnEnv]{Environment manipulation for the renamer monad}
7 module RnEnv where -- Export everything
9 #include "HsVersions.h"
11 import CmdLineOpts ( opt_WarnNameShadowing, opt_WarnUnusedMatches,
12 opt_WarnUnusedBinds, opt_WarnUnusedImports )
14 import RdrHsSyn ( RdrName(..), RdrNameIE,
15 rdrNameOcc, isQual, qual
17 import HsTypes ( getTyVarName, replaceTyVarName )
18 import BasicTypes ( Fixity(..), FixityDirection(..), IfaceFlavour(..) )
20 import Name ( Name, Provenance(..), ExportFlag(..), NamedThing(..),
21 ImportReason(..), getSrcLoc,
22 mkLocalName, mkGlobalName,
24 pprOccName, isLocalName, isLocallyDefined, isAnonOcc,
25 setNameProvenance, getNameProvenance, pprNameProvenance
28 import OccName ( OccName, mkModuleFS,
29 mkDFunOcc, tcOcc, varOcc, tvOcc,
30 isVarOcc, occNameFlavour, occNameString
32 import TyCon ( TyCon )
34 import Unique ( Unique, Uniquable(..), unboundKey )
35 import UniqFM ( emptyUFM, listToUFM, plusUFM_C )
37 import SrcLoc ( SrcLoc, noSrcLoc )
39 import Util ( removeDups )
45 %*********************************************************
47 \subsection{Making new rdr names}
49 %*********************************************************
51 These functions make new RdrNames from stuff read from an interface file
54 ifaceQualTC (m,n,hif) = Qual (mkModuleFS m) (tcOcc n) hif
55 ifaceQualVar (m,n,hif) = Qual (mkModuleFS m) (varOcc n) hif
57 ifaceUnqualTC n = Unqual (tcOcc n)
58 ifaceUnqualVar n = Unqual (varOcc n)
59 ifaceUnqualTv n = Unqual (tvOcc n)
62 %*********************************************************
64 \subsection{Making new names}
66 %*********************************************************
69 newImportedGlobalName :: Module -> OccName -> IfaceFlavour
71 newImportedGlobalName mod occ hif
72 = -- First check the cache
73 getNameSupplyRn `thenRn` \ (us, inst_ns, cache) ->
76 prov = NonLocalDef ImplicitImport hif False
77 -- For in-scope things we improve the provenance in RnNames.qualifyImports
79 case lookupFM cache key of
81 -- A hit in the cache!
82 -- If it has no provenance at the moment then set its provenance
83 -- so that it has the right HiFlag component.
84 -- (This is necessary for known-key things.
85 -- For example, GHCmain.lhs imports as SOURCE
86 -- Main; but Main.main is a known-key thing.)
87 -- Don't fiddle with the provenance if it already has one
88 Just name -> case getNameProvenance name of
90 new_name = setNameProvenance name prov
91 new_cache = addToFM cache key new_name
93 setNameSupplyRn (us, inst_ns, new_cache) `thenRn_`
95 other -> returnRn name
97 Nothing -> -- Miss in the cache!
98 -- Build a new original name, and put it in the cache
100 (us', us1) = splitUniqSupply us
101 uniq = uniqFromSupply us1
102 name = mkGlobalName uniq mod occ prov
103 new_cache = addToFM cache key name
105 setNameSupplyRn (us', inst_ns, new_cache) `thenRn_`
109 newImportedGlobalFromRdrName (Qual mod_name occ hif)
110 = newImportedGlobalName mod_name occ hif
112 newImportedGlobalFromRdrName (Unqual occ)
113 = -- An Unqual is allowed; interface files contain
114 -- unqualified names for locally-defined things, such as
115 -- constructors of a data type.
116 getModuleRn `thenRn ` \ mod_name ->
117 newImportedGlobalName mod_name occ HiFile
120 newLocallyDefinedGlobalName :: Module -> OccName
121 -> (Name -> ExportFlag) -> SrcLoc
123 newLocallyDefinedGlobalName mod occ rec_exp_fn loc
124 = -- First check the cache
125 getNameSupplyRn `thenRn` \ (us, inst_ns, cache) ->
128 mk_prov name = LocalDef loc (rec_exp_fn name)
129 -- We must set the provenance of the thing in the cache
130 -- correctly, particularly whether or not it is locally defined.
132 -- Since newLocallyDefinedGlobalName is used only
133 -- at binding occurrences, we may as well get the provenance
134 -- dead right first time; hence the rec_exp_fn passed in
136 case lookupFM cache key of
138 -- A hit in the cache!
139 -- Overwrite whatever provenance is in the cache already;
140 -- this updates WiredIn things and known-key things,
141 -- which are there from the start, to LocalDef.
143 -- It also means that if there are two defns for the same thing
144 -- in a module, then each gets a separate SrcLoc
146 new_name = setNameProvenance name (mk_prov new_name)
147 new_cache = addToFM cache key new_name
149 setNameSupplyRn (us, inst_ns, new_cache) `thenRn_`
152 -- Miss in the cache!
153 -- Build a new original name, and put it in the cache
155 (us', us1) = splitUniqSupply us
156 uniq = uniqFromSupply us1
157 new_name = mkGlobalName uniq mod occ (mk_prov new_name)
158 new_cache = addToFM cache key new_name
160 setNameSupplyRn (us', inst_ns, new_cache) `thenRn_`
164 newLocalNames :: [(RdrName,SrcLoc)] -> RnM s d [Name]
165 newLocalNames rdr_names
166 = getNameSupplyRn `thenRn` \ (us, inst_ns, cache) ->
169 (us', us1) = splitUniqSupply us
170 uniqs = uniqsFromSupply n us1
171 -- Note: we're not making use of the source location. Not good.
172 locals = [ mkLocalName uniq (rdrNameOcc rdr_name)
173 | ((rdr_name,loc), uniq) <- rdr_names `zip` uniqs
176 setNameSupplyRn (us', inst_ns, cache) `thenRn_`
179 newDFunName cl_occ tycon_occ (Just n) src_loc -- Imported ones have "Just n"
180 = getModuleRn `thenRn` \ mod_name ->
181 newImportedGlobalName mod_name (rdrNameOcc n) HiFile {- Correct? -}
183 newDFunName cl_occ tycon_occ Nothing src_loc -- Local instance decls have a "Nothing"
184 = getModuleRn `thenRn` \ mod_name ->
185 newInstUniq (cl_occ, tycon_occ) `thenRn` \ inst_uniq ->
187 dfun_occ = mkDFunOcc cl_occ tycon_occ inst_uniq
189 newLocallyDefinedGlobalName mod_name dfun_occ (\_ -> Exported) src_loc
192 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
193 -- during compiler debugging.
194 mkUnboundName :: RdrName -> Name
195 mkUnboundName rdr_name = mkLocalName unboundKey (rdrNameOcc rdr_name)
197 isUnboundName :: Name -> Bool
198 isUnboundName name = getUnique name == unboundKey
202 -------------------------------------
203 bindLocatedLocalsRn :: SDoc -- Documentation string for error message
204 -> [(RdrName,SrcLoc)]
205 -> ([Name] -> RnMS s a)
207 bindLocatedLocalsRn doc_str rdr_names_w_loc enclosed_scope
208 = checkDupOrQualNames doc_str rdr_names_w_loc `thenRn_`
210 getLocalNameEnv `thenRn` \ name_env ->
211 (if opt_WarnNameShadowing
213 mapRn (check_shadow name_env) rdr_names_w_loc
218 newLocalNames rdr_names_w_loc `thenRn` \ names ->
220 new_name_env = addListToRdrEnv name_env (map fst rdr_names_w_loc `zip` names)
222 setLocalNameEnv new_name_env (enclosed_scope names)
224 check_shadow name_env (rdr_name,loc)
225 = case lookupRdrEnv name_env rdr_name of
226 Nothing -> returnRn ()
227 Just name -> pushSrcLocRn loc $
228 addWarnRn (shadowedNameWarn rdr_name)
231 -------------------------------------
232 bindLocalsRn doc_str rdr_names enclosed_scope
233 = getSrcLocRn `thenRn` \ loc ->
234 bindLocatedLocalsRn (text doc_str)
235 (rdr_names `zip` repeat loc)
238 -- binLocalsFVRn is the same as bindLocalsRn
239 -- except that it deals with free vars
240 bindLocalsFVRn doc_str rdr_names enclosed_scope
241 = bindLocalsRn doc_str rdr_names $ \ names ->
242 enclosed_scope names `thenRn` \ (thing, fvs) ->
243 returnRn (thing, delListFromNameSet fvs names)
245 -------------------------------------
246 extendTyVarEnvRn :: [HsTyVar Name] -> RnMS s a -> RnMS s a
247 -- This tiresome function is used only in rnDecl on InstDecl
248 extendTyVarEnvRn tyvars enclosed_scope
249 = getLocalNameEnv `thenRn` \ env ->
251 new_env = addListToRdrEnv env [ (Unqual (getOccName name), name)
253 let name = getTyVarName tyvar
256 setLocalNameEnv new_env enclosed_scope
258 bindTyVarsRn :: SDoc -> [HsTyVar RdrName]
259 -> ([HsTyVar Name] -> RnMS s a)
261 bindTyVarsRn doc_str tyvar_names enclosed_scope
262 = bindTyVars2Rn doc_str tyvar_names $ \ names tyvars ->
263 enclosed_scope tyvars
265 -- Gruesome name: return Names as well as HsTyVars
266 bindTyVars2Rn :: SDoc -> [HsTyVar RdrName]
267 -> ([Name] -> [HsTyVar Name] -> RnMS s a)
269 bindTyVars2Rn doc_str tyvar_names enclosed_scope
270 = getSrcLocRn `thenRn` \ loc ->
272 located_tyvars = [(getTyVarName tv, loc) | tv <- tyvar_names]
274 bindLocatedLocalsRn doc_str located_tyvars $ \ names ->
275 enclosed_scope names (zipWith replaceTyVarName tyvar_names names)
277 bindTyVarsFVRn :: SDoc -> [HsTyVar RdrName]
278 -> ([HsTyVar Name] -> RnMS s (a, FreeVars))
279 -> RnMS s (a, FreeVars)
280 bindTyVarsFVRn doc_str rdr_names enclosed_scope
281 = bindTyVars2Rn doc_str rdr_names $ \ names tyvars ->
282 enclosed_scope tyvars `thenRn` \ (thing, fvs) ->
283 returnRn (thing, delListFromNameSet fvs names)
285 bindTyVarsFV2Rn :: SDoc -> [HsTyVar RdrName]
286 -> ([Name] -> [HsTyVar Name] -> RnMS s (a, FreeVars))
287 -> RnMS s (a, FreeVars)
288 bindTyVarsFV2Rn doc_str rdr_names enclosed_scope
289 = bindTyVars2Rn doc_str rdr_names $ \ names tyvars ->
290 enclosed_scope names tyvars `thenRn` \ (thing, fvs) ->
291 returnRn (thing, delListFromNameSet fvs names)
294 -------------------------------------
295 checkDupOrQualNames, checkDupNames :: SDoc
296 -> [(RdrName, SrcLoc)]
298 -- Works in any variant of the renamer monad
300 checkDupOrQualNames doc_str rdr_names_w_loc
301 = -- Check for use of qualified names
302 mapRn (qualNameErr doc_str) quals `thenRn_`
303 checkDupNames doc_str rdr_names_w_loc
305 quals = filter (isQual.fst) rdr_names_w_loc
307 checkDupNames doc_str rdr_names_w_loc
308 = -- Check for dupicated names in a binding group
309 mapRn (dupNamesErr doc_str) dups `thenRn_`
312 (_, dups) = removeDups (\(n1,l1) (n2,l2) -> n1 `compare` n2) rdr_names_w_loc
316 ifaceFlavour name = case getNameProvenance name of
317 NonLocalDef _ hif _ -> hif
318 other -> HiFile -- Shouldn't happen
322 %*********************************************************
324 \subsection{Looking up names}
326 %*********************************************************
328 Looking up a name in the RnEnv.
331 checkUnboundRn :: RdrName -> Maybe Name -> RnMS s Name
332 checkUnboundRn rdr_name (Just name)
336 checkUnboundRn rdr_name Nothing
337 = -- Not found by lookup
338 getModeRn `thenRn` \ mode ->
340 -- Not found when processing source code; so fail
341 SourceMode -> failWithRn (mkUnboundName rdr_name)
342 (unknownNameErr rdr_name)
344 -- Not found when processing an imported declaration,
345 -- so we create a new name for the purpose
346 InterfaceMode _ -> newImportedGlobalFromRdrName rdr_name
348 lookupBndrRn rdr_name
349 = lookupNameRn rdr_name `thenRn` \ maybe_name ->
350 checkUnboundRn rdr_name maybe_name
352 -- Just like lookupRn except that we record the occurrence too
353 -- Perhaps surprisingly, even wired-in names are recorded.
354 -- Why? So that we know which wired-in names are referred to when
355 -- deciding which instance declarations to import.
356 lookupOccRn :: RdrName -> RnMS s Name
358 = lookupNameRn rdr_name `thenRn` \ maybe_name ->
359 checkUnboundRn rdr_name maybe_name `thenRn` \ name ->
361 name' = mungePrintUnqual rdr_name name
363 addOccurrenceName name'
365 -- lookupGlobalOccRn is like lookupOccRn, except that it looks in the global
366 -- environment. It's used only for
367 -- record field names
368 -- class op names in class and instance decls
369 lookupGlobalOccRn :: RdrName -> RnMS s Name
370 lookupGlobalOccRn rdr_name
371 = lookupGlobalNameRn rdr_name `thenRn` \ maybe_name ->
372 checkUnboundRn rdr_name maybe_name `thenRn` \ name ->
374 name' = mungePrintUnqual rdr_name name
376 addOccurrenceName name'
379 -- mungePrintUnqual is used to make *imported* *occurrences* print unqualified
380 -- if they were mentioned unqualified in the source code.
381 -- This improves error messages from the type checker.
382 -- NB: the binding site is treated differently; see lookupBndrRn
383 -- After the type checker all occurrences are replaced by the one
384 -- at the binding site.
385 mungePrintUnqual (Qual _ _ _) name = name
386 mungePrintUnqual (Unqual _) name
387 = case getNameProvenance name of
388 NonLocalDef imp hif False -> setNameProvenance name (NonLocalDef imp hif True)
391 -- lookupImplicitOccRn takes an RdrName representing an *original* name, and
392 -- adds it to the occurrence pool so that it'll be loaded later. This is
393 -- used when language constructs (such as monad comprehensions, overloaded literals,
394 -- or deriving clauses) require some stuff to be loaded that isn't explicitly
395 -- mentioned in the code.
397 -- This doesn't apply in interface mode, where everything is explicit, but
398 -- we don't check for this case: it does no harm to record an "extra" occurrence
399 -- and lookupImplicitOccRn isn't used much in interface mode (it's only the
400 -- Nothing clause of rnDerivs that calls it at all I think).
401 -- [Jan 98: this comment is wrong: rnHsType uses it quite a bit.]
403 -- For List and Tuple types it's important to get the correct
404 -- isLocallyDefined flag, which is used in turn when deciding
405 -- whether there are any instance decls in this module are "special".
406 -- The name cache should have the correct provenance, though.
408 lookupImplicitOccRn :: RdrName -> RnMS s Name
409 lookupImplicitOccRn (Qual mod occ hif)
410 = newImportedGlobalName mod occ hif `thenRn` \ name ->
411 addOccurrenceName name
413 addImplicitOccRn :: Name -> RnMS s Name
414 addImplicitOccRn name = addOccurrenceName name
416 addImplicitOccsRn :: [Name] -> RnMS s ()
417 addImplicitOccsRn names = addOccurrenceNames names
421 lookupFixity :: Name -> RnMS s Fixity
423 = getFixityEnv `thenRn` \ fixity_env ->
424 case lookupNameEnv fixity_env name of
425 Just (FixitySig _ fixity _) -> returnRn fixity
426 Nothing -> returnRn (Fixity 9 InfixL) -- Default case
429 mkPrintUnqualFn returns a function that takes a Name and tells whether
430 its unqualified name is in scope. This is put as a boolean flag in
431 the Name's provenance to guide whether or not to print the name qualified
435 mkPrintUnqualFn :: GlobalRdrEnv -> Name -> Bool
439 lookup name = case lookupRdrEnv env (Unqual (nameOccName name)) of
440 Just [name'] -> name == name'
444 %************************************************************************
446 \subsection{Envt utility functions}
448 %************************************************************************
450 =============== RnEnv ================
452 plusRnEnv (RnEnv n1 f1) (RnEnv n2 f2)
453 = RnEnv (n1 `plusGlobalRdrEnv` n2)
454 (f1 `plusNameEnv` f2)
458 =============== NameEnv ================
460 -- Look in global env only
461 lookupGlobalNameRn :: RdrName -> RnMS s (Maybe Name)
462 lookupGlobalNameRn rdr_name
463 = getNameEnvs `thenRn` \ (global_env, local_env) ->
464 lookup_global global_env rdr_name
466 -- Look in both local and global env
467 lookupNameRn :: RdrName -> RnMS s (Maybe Name)
468 lookupNameRn rdr_name
469 = getNameEnvs `thenRn` \ (global_env, local_env) ->
470 case lookupRdrEnv local_env rdr_name of
471 Just name -> returnRn (Just name)
472 Nothing -> lookup_global global_env rdr_name
474 lookup_global global_env rdr_name
475 = case lookupRdrEnv global_env rdr_name of
476 Just [name] -> returnRn (Just name)
477 Just stuff@(name:_) -> addNameClashErrRn rdr_name stuff `thenRn_`
479 Nothing -> returnRn Nothing
481 plusGlobalRdrEnv :: GlobalRdrEnv -> GlobalRdrEnv -> GlobalRdrEnv
482 plusGlobalRdrEnv env1 env2 = plusFM_C combine_globals env1 env2
484 addOneToGlobalRdrEnv :: GlobalRdrEnv -> RdrName -> Name -> GlobalRdrEnv
485 addOneToGlobalRdrEnv env rdr_name name = addToFM_C combine_globals env rdr_name [name]
487 delOneFromGlobalRdrEnv :: GlobalRdrEnv -> RdrName -> GlobalRdrEnv
488 delOneFromGlobalRdrEnv env rdr_name = delFromFM env rdr_name
490 combine_globals :: [Name] -- Old
493 combine_globals ns_old ns_new -- ns_new is often short
494 = foldr add ns_old ns_new
496 add n ns | all (no_conflict n) ns_old = map choose ns -- Eliminate duplicates
499 choose n' | n==n' && better_provenance n n' = n
503 -- a local thing over an imported thing
504 -- a user-imported thing over a non-user-imported thing
505 -- an explicitly-imported thing over an implicitly imported thing
506 better_provenance n1 n2
507 = case (getNameProvenance n1, getNameProvenance n2) of
508 (LocalDef _ _, _ ) -> True
509 (NonLocalDef (UserImport _ _ True) _ _, _ ) -> True
510 (NonLocalDef (UserImport _ _ _ ) _ _, NonLocalDef ImplicitImport _ _) -> True
513 no_conflict :: Name -> Name -> Bool
514 no_conflict n1 n2 | isLocallyDefined n1 && isLocallyDefined n2 = False
515 | otherwise = n1 == n2
516 -- We complain of a conflict if one RdrName maps to two different Names,
517 -- OR if one RdrName maps to the same *locally-defined* Name. The latter
518 -- case is to catch two separate, local definitions of the same thing.
520 -- If a module imports itself then there might be a local defn and an imported
521 -- defn of the same name; in this case the names will compare as equal, but
522 -- will still have different provenances
527 =============== ExportAvails ================
529 mkEmptyExportAvails :: Module -> ExportAvails
530 mkEmptyExportAvails mod_name = (unitFM mod_name [], emptyUFM)
532 mkExportAvails :: Module -> Bool -> GlobalRdrEnv -> [AvailInfo] -> ExportAvails
533 mkExportAvails mod_name unqual_imp name_env avails
534 = (mod_avail_env, entity_avail_env)
536 mod_avail_env = unitFM mod_name unqual_avails
538 -- unqual_avails is the Avails that are visible in *unqualfied* form
539 -- (1.4 Report, Section 5.1.1)
541 -- import T hiding( f )
542 -- we delete f from avails
544 unqual_avails | not unqual_imp = [] -- Short cut when no unqualified imports
545 | otherwise = [ avail' | avail <- avails
546 , let avail' = prune avail
548 NotAvailable -> False
552 prune (Avail n) | unqual_in_scope n = Avail n
553 prune (Avail n) | otherwise = NotAvailable
554 prune (AvailTC n ns) = AvailTC n (filter unqual_in_scope ns)
556 unqual_in_scope n = Unqual (nameOccName n) `elemFM` name_env
558 entity_avail_env = listToUFM [ (name,avail) | avail <- avails,
559 name <- availNames avail]
561 plusExportAvails :: ExportAvails -> ExportAvails -> ExportAvails
562 plusExportAvails (m1, e1) (m2, e2)
563 = (plusFM_C (++) m1 m2, plusUFM_C plusAvail e1 e2)
564 -- ToDo: wasteful: we do this once for each constructor!
568 =============== AvailInfo ================
570 plusAvail (Avail n1) (Avail n2) = Avail n1
571 plusAvail (AvailTC n1 ns1) (AvailTC n2 ns2) = AvailTC n1 (nub (ns1 ++ ns2))
572 plusAvail a NotAvailable = a
573 plusAvail NotAvailable a = a
576 plusAvail a1 a2 = pprPanic "RnEnv.plusAvail" (hsep [pprAvail a1,pprAvail a2])
579 addAvailToNameSet :: NameSet -> AvailInfo -> NameSet
580 addAvailToNameSet names avail = addListToNameSet names (availNames avail)
582 availsToNameSet :: [AvailInfo] -> NameSet
583 availsToNameSet avails = foldl addAvailToNameSet emptyNameSet avails
585 availName :: AvailInfo -> Name
586 availName (Avail n) = n
587 availName (AvailTC n _) = n
589 availNames :: AvailInfo -> [Name]
590 availNames NotAvailable = []
591 availNames (Avail n) = [n]
592 availNames (AvailTC n ns) = ns
594 filterAvail :: RdrNameIE -- Wanted
595 -> AvailInfo -- Available
596 -> AvailInfo -- Resulting available;
597 -- NotAvailable if (any of the) wanted stuff isn't there
599 filterAvail ie@(IEThingWith want wants) avail@(AvailTC n ns)
600 | sub_names_ok = AvailTC n (filter is_wanted ns)
603 pprTrace "filterAvail" (hsep [ppr ie, pprAvail avail]) $
607 is_wanted name = nameOccName name `elem` wanted_occs
608 sub_names_ok = all (`elem` avail_occs) wanted_occs
609 avail_occs = map nameOccName ns
610 wanted_occs = map rdrNameOcc (want:wants)
612 filterAvail (IEThingAbs _) (AvailTC n ns) = ASSERT( n `elem` ns )
614 filterAvail (IEThingAll _) avail@(AvailTC _ _) = avail
616 filterAvail (IEVar _) avail@(Avail n) = avail
617 filterAvail (IEVar v) avail@(AvailTC n ns) = AvailTC n (filter wanted ns)
619 wanted n = nameOccName n == occ
621 -- The second equation happens if we import a class op, thus
623 -- where op is a class operation
627 filterAvail ie avail = pprPanic "filterAvail" (ppr ie $$ pprAvail avail)
631 -- In interfaces, pprAvail gets given the OccName of the "host" thing
632 pprAvail avail = getPprStyle $ \ sty ->
633 if ifaceStyle sty then
634 ppr_avail (pprOccName . nameOccName) avail
638 ppr_avail pp_name NotAvailable = ptext SLIT("NotAvailable")
639 ppr_avail pp_name (AvailTC n ns) = hsep [
641 parens $ hsep $ punctuate comma $
644 ppr_avail pp_name (Avail n) = pp_name n
650 %************************************************************************
652 \subsection{Free variable manipulation}
654 %************************************************************************
657 type FreeVars = NameSet
659 plusFV :: FreeVars -> FreeVars -> FreeVars
660 addOneFV :: FreeVars -> Name -> FreeVars
661 unitFV :: Name -> FreeVars
663 plusFVs :: [FreeVars] -> FreeVars
665 plusFV = unionNameSets
666 addOneFV = addOneToNameSet
668 emptyFVs = emptyNameSet
669 plusFVs = unionManyNameSets
673 %************************************************************************
675 \subsection{Envt utility functions}
677 %************************************************************************
681 warnUnusedBinds, warnUnusedMatches :: [Name] -> RnM s d ()
683 warnUnusedTopNames ns
684 | not opt_WarnUnusedBinds && not opt_WarnUnusedImports
685 = returnRn () -- Don't force ns unless necessary
687 warnUnusedTopNames (n:ns)
688 | is_local && opt_WarnUnusedBinds = warnUnusedNames False{-include name's provenance-} ns
689 | not is_local && opt_WarnUnusedImports = warnUnusedNames False ns
691 is_local = isLocallyDefined n
693 warnUnusedTopName other = returnRn ()
696 | not opt_WarnUnusedBinds = returnRn ()
697 | otherwise = warnUnusedNames False ns
700 Haskell 98 encourages compilers to suppress warnings about
701 unused names in a pattern if they start with "_". Which
704 Note: omit the inclusion of the names' provenance in the
705 generated warning -- it's already given in the header
706 of the warning (+ the local names we've been given have
707 a provenance that's ultra low in content.)
710 warnUnusedMatches names
711 | opt_WarnUnusedMatches = warnUnusedNames True (filter (not.isAnonOcc.getOccName) names)
712 | otherwise = returnRn ()
714 warnUnusedNames :: Bool{-display provenance-} -> [Name] -> RnM s d ()
718 warnUnusedNames short_msg names
720 sep [text "The following names are unused:",
721 nest 4 ((if short_msg then hsep else vcat) (map pp names))]
725 | otherwise = ppr n <> comma <+> pprNameProvenance n
727 addNameClashErrRn rdr_name names
728 {- NO LONGER NEEDED WITH LAZY NAME-CLASH REPORTING
729 | isClassDataConRdrName rdr_name
730 -- Nasty hack to prevent error messages complain about conflicts for ":C",
731 -- where "C" is a class. There'll be a message about C, and :C isn't
732 -- the programmer's business. There may be a better way to filter this
733 -- out, but I couldn't get up the energy to find it.
739 = addErrRn (vcat [ptext SLIT("Ambiguous occurrence") <+> quotes (ppr rdr_name),
740 ptext SLIT("It could refer to:") <+> vcat (map mk_ref names)])
742 mk_ref name = ppr name <> colon <+> pprNameProvenance name
744 fixityClashErr (rdr_name, ((_,how_in_scope1), (_, how_in_scope2)))
745 = hang (hsep [ptext SLIT("Conflicting fixities for"), quotes (ppr rdr_name)])
746 4 (vcat [ppr how_in_scope1,
749 shadowedNameWarn shadow
750 = hsep [ptext SLIT("This binding for"),
752 ptext SLIT("shadows an existing binding")]
755 = sep [text flavour, ptext SLIT("not in scope:"), quotes (ppr name)]
757 flavour = occNameFlavour (rdrNameOcc name)
759 qualNameErr descriptor (name,loc)
761 addErrRn (hsep [ ptext SLIT("Invalid use of qualified name"),
766 dupNamesErr descriptor ((name,loc) : dup_things)
768 addErrRn (hsep [ptext SLIT("Conflicting definitions for"),
770 ptext SLIT("in"), descriptor])