a756c7f6c91f22d969895c234fbcc6ed2c6ecf14
[ghc-hetmet.git] / compiler / rename / RnNames.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[RnNames]{Extracting imported and top-level names in scope}
5
6 \begin{code}
7 module RnNames (
8         rnImports, getLocalNonValBinders,
9         rnExports, extendGlobalRdrEnvRn,
10         gresFromAvails,
11         reportUnusedNames, finishWarnings,
12     ) where
13
14 #include "HsVersions.h"
15
16 import DynFlags
17 import HsSyn
18 import TcEnv            ( isBrackStage )
19 import RnEnv
20 import RnHsDoc          ( rnHsDoc )
21 import IfaceEnv         ( ifaceExportNames )
22 import LoadIface        ( loadSrcInterface )
23 import TcRnMonad
24
25 import HeaderInfo       ( mkPrelImports )
26 import PrelNames
27 import Module
28 import Name
29 import NameEnv
30 import NameSet
31 import HscTypes
32 import RdrName
33 import Outputable
34 import Maybes
35 import SrcLoc
36 import ErrUtils
37 import Util
38 import FastString
39 import ListSetOps
40 import Data.List        ( partition, (\\), delete, find )
41 import qualified Data.Set as Set
42 import System.IO
43 import Control.Monad
44 import Data.Map         ( Map )
45 import qualified Data.Map as Map
46 \end{code}
47
48
49
50 %************************************************************************
51 %*                                                                      *
52 \subsection{rnImports}
53 %*                                                                      *
54 %************************************************************************
55
56 \begin{code}
57 rnImports :: [LImportDecl RdrName]
58            -> RnM ([LImportDecl Name], GlobalRdrEnv, ImportAvails,AnyHpcUsage)
59
60 rnImports imports
61          -- PROCESS IMPORT DECLS
62          -- Do the non {- SOURCE -} ones first, so that we get a helpful
63          -- warning for {- SOURCE -} ones that are unnecessary
64     = do this_mod <- getModule
65          implicit_prelude <- xoptM Opt_ImplicitPrelude
66          let prel_imports       = mkPrelImports (moduleName this_mod) implicit_prelude imports
67              (source, ordinary) = partition is_source_import imports
68              is_source_import (L _ (ImportDecl _ _ is_boot _ _ _)) = is_boot
69
70          ifDOptM Opt_WarnImplicitPrelude (
71             when (notNull prel_imports) $ addWarn (implicitPreludeWarn)
72           )
73
74          stuff1 <- mapM (rnImportDecl this_mod True)  prel_imports
75          stuff2 <- mapM (rnImportDecl this_mod False) ordinary
76          stuff3 <- mapM (rnImportDecl this_mod False) source
77          let (decls, rdr_env, imp_avails, hpc_usage) = combine (stuff1 ++ stuff2 ++ stuff3)
78          return (decls, rdr_env, imp_avails, hpc_usage)
79
80     where
81    combine :: [(LImportDecl Name,  GlobalRdrEnv, ImportAvails,AnyHpcUsage)]
82            -> ([LImportDecl Name], GlobalRdrEnv, ImportAvails,AnyHpcUsage)
83    combine = foldr plus ([], emptyGlobalRdrEnv, emptyImportAvails,False)
84         where plus (decl,  gbl_env1, imp_avails1,hpc_usage1)
85                    (decls, gbl_env2, imp_avails2,hpc_usage2)
86                 = (decl:decls,
87                    gbl_env1 `plusGlobalRdrEnv` gbl_env2,
88                    imp_avails1 `plusImportAvails` imp_avails2,
89                    hpc_usage1 || hpc_usage2)
90
91 rnImportDecl  :: Module -> Bool
92               -> LImportDecl RdrName
93               -> RnM (LImportDecl Name, GlobalRdrEnv, ImportAvails,AnyHpcUsage)
94
95 rnImportDecl this_mod implicit_prelude
96              (L loc (ImportDecl { ideclName = loc_imp_mod_name, ideclPkgQual = mb_pkg
97                                 , ideclSource = want_boot, ideclQualified = qual_only
98                                 , ideclAs = as_mod, ideclHiding = imp_details }))
99   = setSrcSpan loc $ do
100
101     when (isJust mb_pkg) $ do
102         pkg_imports <- xoptM Opt_PackageImports
103         when (not pkg_imports) $ addErr packageImportErr
104
105         -- If there's an error in loadInterface, (e.g. interface
106         -- file not found) we get lots of spurious errors from 'filterImports'
107     let
108         imp_mod_name = unLoc loc_imp_mod_name
109         doc = ppr imp_mod_name <+> ptext (sLit "is directly imported")
110
111         -- Check for a missing import list
112         -- (Opt_WarnMissingImportList also checks for T(..) items
113         --  but that is done in checkDodgyImport below)
114     case imp_details of
115         Just (False, _)       -> return ()
116         _  | implicit_prelude -> return ()
117            | otherwise        -> ifDOptM Opt_WarnMissingImportList $
118                                  addWarn (missingImportListWarn imp_mod_name)
119
120     iface <- loadSrcInterface doc imp_mod_name want_boot mb_pkg
121
122         -- Compiler sanity check: if the import didn't say
123         -- {-# SOURCE #-} we should not get a hi-boot file
124     WARN( not want_boot && mi_boot iface, ppr imp_mod_name ) (do
125
126         -- Issue a user warning for a redundant {- SOURCE -} import
127         -- NB that we arrange to read all the ordinary imports before
128         -- any of the {- SOURCE -} imports.
129         --
130         -- in --make and GHCi, the compilation manager checks for this,
131         -- and indeed we shouldn't do it here because the existence of
132         -- the non-boot module depends on the compilation order, which
133         -- is not deterministic.  The hs-boot test can show this up.
134     dflags <- getDOpts
135     warnIf (want_boot && not (mi_boot iface) && isOneShot (ghcMode dflags))
136            (warnRedundantSourceImport imp_mod_name)
137
138     let
139         imp_mod    = mi_module iface
140         warns      = mi_warns iface
141         orph_iface = mi_orphan iface
142         has_finsts = mi_finsts iface
143         deps       = mi_deps iface
144
145         filtered_exports = filter not_this_mod (mi_exports iface)
146         not_this_mod (mod,_) = mod /= this_mod
147         -- If the module exports anything defined in this module, just
148         -- ignore it.  Reason: otherwise it looks as if there are two
149         -- local definition sites for the thing, and an error gets
150         -- reported.  Easiest thing is just to filter them out up
151         -- front. This situation only arises if a module imports
152         -- itself, or another module that imported it.  (Necessarily,
153         -- this invoves a loop.)
154         --
155         -- Tiresome consequence: if you say
156         --      module A where
157         --         import B( AType )
158         --         type AType = ...
159         --
160         --      module B( AType ) where
161         --         import {-# SOURCE #-} A( AType )
162         --
163         -- then you'll get a 'B does not export AType' message.  Oh well.
164
165         qual_mod_name = case as_mod of
166                           Nothing           -> imp_mod_name
167                           Just another_name -> another_name
168         imp_spec  = ImpDeclSpec { is_mod = imp_mod_name, is_qual = qual_only,
169                                   is_dloc = loc, is_as = qual_mod_name }
170
171     -- Get the total exports from this module
172     total_avails <- ifaceExportNames filtered_exports
173
174     -- filter the imports according to the import declaration
175     (new_imp_details, gbl_env) <-
176         filterImports iface imp_spec imp_details total_avails
177
178     dflags <- getDOpts
179
180     let
181         -- Compute new transitive dependencies
182
183         orphans | orph_iface = ASSERT( not (imp_mod `elem` dep_orphs deps) )
184                                imp_mod : dep_orphs deps
185                 | otherwise  = dep_orphs deps
186
187         finsts | has_finsts = ASSERT( not (imp_mod `elem` dep_finsts deps) )
188                               imp_mod : dep_finsts deps
189                | otherwise  = dep_finsts deps
190
191         pkg = modulePackageId (mi_module iface)
192
193         (dependent_mods, dependent_pkgs)
194            | pkg == thisPackage dflags =
195                 -- Imported module is from the home package
196                 -- Take its dependent modules and add imp_mod itself
197                 -- Take its dependent packages unchanged
198                 --
199                 -- NB: (dep_mods deps) might include a hi-boot file
200                 -- for the module being compiled, CM. Do *not* filter
201                 -- this out (as we used to), because when we've
202                 -- finished dealing with the direct imports we want to
203                 -- know if any of them depended on CM.hi-boot, in
204                 -- which case we should do the hi-boot consistency
205                 -- check.  See LoadIface.loadHiBootInterface
206                 ((imp_mod_name, want_boot) : dep_mods deps, dep_pkgs deps)
207
208            | otherwise =
209                 -- Imported module is from another package
210                 -- Dump the dependent modules
211                 -- Add the package imp_mod comes from to the dependent packages
212                 ASSERT2( not (pkg `elem` dep_pkgs deps), ppr pkg <+> ppr (dep_pkgs deps) )
213                 ([], pkg : dep_pkgs deps)
214
215         -- True <=> import M ()
216         import_all = case imp_details of
217                         Just (is_hiding, ls) -> not is_hiding && null ls
218                         _                    -> False
219
220         imports   = ImportAvails {
221                         imp_mods     = unitModuleEnv imp_mod [(qual_mod_name, import_all, loc)],
222                         imp_orphs    = orphans,
223                         imp_finsts   = finsts,
224                         imp_dep_mods = mkModDeps dependent_mods,
225                         imp_dep_pkgs = dependent_pkgs
226                    }
227
228     -- Complain if we import a deprecated module
229     ifDOptM Opt_WarnWarningsDeprecations        (
230        case warns of
231           WarnAll txt -> addWarn (moduleWarn imp_mod_name txt)
232           _           -> return ()
233      )
234
235     let new_imp_decl = L loc (ImportDecl loc_imp_mod_name mb_pkg want_boot
236                                          qual_only as_mod new_imp_details)
237
238     return (new_imp_decl, gbl_env, imports, mi_hpc iface)
239     )
240
241 warnRedundantSourceImport :: ModuleName -> SDoc
242 warnRedundantSourceImport mod_name
243   = ptext (sLit "Unnecessary {-# SOURCE #-} in the import of module")
244           <+> quotes (ppr mod_name)
245 \end{code}
246
247
248 %************************************************************************
249 %*                                                                      *
250 \subsection{importsFromLocalDecls}
251 %*                                                                      *
252 %************************************************************************
253
254 From the top-level declarations of this module produce
255         * the lexical environment
256         * the ImportAvails
257 created by its bindings.
258
259 Note [Top-level Names in Template Haskell decl quotes]
260 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
261 Consider a Template Haskell declaration quotation like this:
262       module M where
263         f x = h [d| f = 3 |]
264 When renaming the declarations inside [d| ...|], we treat the
265 top level binders specially in two ways
266
267 1.  We give them an Internal name, not (as usual) an External one.
268     Otherwise the NameCache gets confused by a second allocation of
269     M.f.  (We used to invent a fake module ThFake to avoid this, but
270     that had other problems, notably in getting the correct answer for
271     nameIsLocalOrFrom in lookupFixity. So we now leave tcg_module
272     unaffected.)
273
274 2.  We make them *shadow* the outer bindings. If we don't do that,
275     we'll get a complaint when extending the GlobalRdrEnv, saying that
276     there are two bindings for 'f'.  There are several tricky points:
277
278     * This shadowing applies even if the binding for 'f' is in a
279       where-clause, and hence is in the *local* RdrEnv not the *global*
280       RdrEnv.
281
282     * The *qualified* name M.f from the enclosing module must certainly
283       still be available.  So we don't nuke it entirely; we just make
284       it seem like qualified import.
285
286     * We only shadow *External* names (which come from the main module)
287       Do not shadow *Inernal* names because in the bracket
288           [d| class C a where f :: a
289               f = 4 |]
290       rnSrcDecls will first call extendGlobalRdrEnvRn with C[f] from the
291       class decl, and *separately* extend the envt with the value binding.
292
293 3. We find out whether we are inside a [d| ... |] by testing the TH
294    stage. This is a slight hack, because the stage field was really
295    meant for the type checker, and here we are not interested in the
296    fields of Brack, hence the error thunks in thRnBrack.
297
298 \begin{code}
299 extendGlobalRdrEnvRn :: [AvailInfo]
300                      -> MiniFixityEnv
301                      -> RnM (TcGblEnv, TcLclEnv)
302 -- Updates both the GlobalRdrEnv and the FixityEnv
303 -- We return a new TcLclEnv only because we might have to
304 -- delete some bindings from it;
305 -- see Note [Top-level Names in Template Haskell decl quotes]
306
307 extendGlobalRdrEnvRn avails new_fixities
308   = do  { (gbl_env, lcl_env) <- getEnvs
309         ; stage <- getStage
310         ; let rdr_env = tcg_rdr_env gbl_env
311               fix_env = tcg_fix_env gbl_env
312
313               -- Delete new_occs from global and local envs
314               -- If we are in a TemplateHaskell decl bracket,
315               --    we are going to shadow them
316               -- See Note [Top-level Names in Template Haskell decl quotes]
317               shadowP  = isBrackStage stage
318               new_occs = map (nameOccName . gre_name) gres
319               rdr_env1 = transformGREs qual_gre new_occs rdr_env
320               lcl_env1 = lcl_env { tcl_rdr = delListFromOccEnv (tcl_rdr lcl_env) new_occs }
321               (rdr_env2, lcl_env2) | shadowP   = (rdr_env1, lcl_env1)
322                                    | otherwise = (rdr_env,  lcl_env)
323
324               rdr_env3 = foldl extendGlobalRdrEnv rdr_env2 gres
325               fix_env' = foldl extend_fix_env     fix_env  gres
326               (rdr_env', dups) = findLocalDupsRdrEnv rdr_env3 new_occs
327
328               gbl_env' = gbl_env { tcg_rdr_env = rdr_env', tcg_fix_env = fix_env' }
329
330         ; mapM_ addDupDeclErr dups
331
332         ; traceRn (text "extendGlobalRdrEnvRn" <+> (ppr new_fixities $$ ppr fix_env $$ ppr fix_env'))
333         ; return (gbl_env', lcl_env2) }
334   where
335     gres = gresFromAvails LocalDef avails
336
337     -- If there is a fixity decl for the gre, add it to the fixity env
338     extend_fix_env fix_env gre
339       | Just (L _ fi) <- lookupFsEnv new_fixities (occNameFS occ)
340       = extendNameEnv fix_env name (FixItem occ fi)
341       | otherwise
342       = fix_env
343       where
344         name = gre_name gre
345         occ  = nameOccName name
346
347     qual_gre :: GlobalRdrElt -> GlobalRdrElt
348     -- Transform top-level GREs from the module being compiled
349     -- so that they are out of the way of new definitions in a Template
350     -- Haskell bracket
351     -- See Note [Top-level Names in Template Haskell decl quotes]
352     -- Seems like 5 times as much work as it deserves!
353     --
354     -- For a LocalDef we make a (fake) qualified imported GRE for a
355     -- local GRE so that the original *qualified* name is still in scope
356     -- but the *unqualified* one no longer is.  What a hack!
357
358     qual_gre gre@(GRE { gre_prov = LocalDef, gre_name = name })
359         | isExternalName name = gre { gre_prov = Imported [imp_spec] }
360         | otherwise           = gre
361           -- Do not shadow Internal (ie Template Haskell) Names
362           -- See Note [Top-level Names in Template Haskell decl quotes]
363         where
364           mod = ASSERT2( isExternalName name, ppr name) moduleName (nameModule name)
365           imp_spec = ImpSpec { is_item = ImpAll, is_decl = decl_spec }
366           decl_spec = ImpDeclSpec { is_mod = mod, is_as = mod,
367                                     is_qual = True,  -- Qualified only!
368                                     is_dloc = srcLocSpan (nameSrcLoc name) }
369
370     qual_gre gre@(GRE { gre_prov = Imported specs })
371         = gre { gre_prov = Imported (map qual_spec specs) }
372
373     qual_spec spec@(ImpSpec { is_decl = decl_spec })
374         = spec { is_decl = decl_spec { is_qual = True } }
375 \end{code}
376
377 @getLocalDeclBinders@ returns the names for an @HsDecl@.  It's
378 used for source code.
379
380         *** See "THE NAMING STORY" in HsDecls ****
381
382 Instances of type families
383 ~~~~~~~~~~~~~~~~~~~~~~~~~~
384 Family instances contain data constructors that we need to collect and we also
385 need to descend into the type instances of associated families in class
386 instances. The type constructor of a family instance is a usage occurence.
387 Hence, we don't return it as a subname in 'AvailInfo'; otherwise, we would get
388 a duplicate declaration error.
389
390 Note [Looking up family names in family instances]
391 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
392 Consider
393
394   module M where
395     type family T a :: *
396     type instance M.T Int = Bool
397
398 We might think that we can simply use 'lookupOccRn' when processing the type
399 instance to look up 'M.T'.  Alas, we can't!  The type family declaration is in
400 the *same* HsGroup as the type instance declaration.  Hence, as we are
401 currently collecting the binders declared in that HsGroup, these binders will
402 not have been added to the global environment yet.
403
404 In the case of type classes, this problem does not arise, as a class instance
405 does not define any binders of it's own.  So, we simply don't attempt to look
406 up the class names of class instances in 'get_local_binders' below.
407
408 If we don't look up class instances, can't we get away without looking up type
409 instances, too?  No, we can't.  Data type instances define data constructors
410 and we need to
411
412   (1) collect those in 'get_local_binders' and
413   (2) we need to get their parent name in 'get_local_binders', too, to
414       produce an appropriate 'AvailTC'.
415
416 This parent name is exactly the family name of the type instance that is so
417 difficult to look up.
418
419 We solve this problem as follows:
420
421   (a) We process all type declarations other than type instances first.
422   (b) Then, we compute a 'GlobalRdrEnv' from the result of the first step.
423   (c) Finally, we process all type instances (both those on the toplevel and
424       those nested in class instances) and check for the family names in the
425       'GlobalRdrEnv' produced in the previous step before using 'lookupOccRn'.
426
427 \begin{code}
428 getLocalNonValBinders :: HsGroup RdrName -> RnM [AvailInfo]
429 -- Get all the top-level binders bound the group *except*
430 -- for value bindings, which are treated separately
431 -- Specificaly we return AvailInfo for
432 --      type decls (incl constructors and record selectors)
433 --      class decls (including class ops)
434 --      associated types
435 --      foreign imports
436 --      (in hs-boot files) value signatures
437
438 getLocalNonValBinders group
439   = do { gbl_env <- getGblEnv
440        ; get_local_binders gbl_env group }
441
442 get_local_binders :: TcGblEnv -> HsGroup RdrName -> RnM [GenAvailInfo Name]
443 get_local_binders gbl_env (HsGroup {hs_valds  = ValBindsIn _ val_sigs,
444                                     hs_tyclds = tycl_decls,
445                                     hs_instds = inst_decls,
446                                     hs_fords  = foreign_decls })
447   = do  { -- separate out the family instance declarations
448           let (tyinst_decls1, tycl_decls_noinsts)
449                            = partition (isFamInstDecl . unLoc) (concat tycl_decls)
450               tyinst_decls = tyinst_decls1 ++ instDeclATs inst_decls
451
452           -- process all type/class decls except family instances
453         ; tc_names  <- mapM new_tc tycl_decls_noinsts
454
455           -- create a temporary rdr env of the type binders
456         ; let tc_gres     = gresFromAvails LocalDef tc_names
457               tc_name_env = foldl extendGlobalRdrEnv emptyGlobalRdrEnv tc_gres
458
459           -- process all family instances
460         ; ti_names  <- mapM (new_ti tc_name_env) tyinst_decls
461
462           -- finish off with value binder in case of a hs-boot file
463         ; val_names <- mapM new_simple val_bndrs
464         ; return (val_names ++ tc_names ++ ti_names) }
465   where
466     is_hs_boot = isHsBoot (tcg_src gbl_env) ;
467
468     for_hs_bndrs :: [Located RdrName]
469     for_hs_bndrs = [nm | L _ (ForeignImport nm _ _) <- foreign_decls]
470
471     -- In a hs-boot file, the value binders come from the
472     --  *signatures*, and there should be no foreign binders
473     val_bndrs :: [Located RdrName]
474     val_bndrs | is_hs_boot = [nm | L _ (TypeSig nm _) <- val_sigs]
475               | otherwise  = for_hs_bndrs
476
477     new_simple :: Located RdrName -> RnM (GenAvailInfo Name)
478     new_simple rdr_name = do
479         nm <- newTopSrcBinder rdr_name
480         return (Avail nm)
481
482     new_tc tc_decl              -- NOT for type/data instances
483         = do { main_name <- newTopSrcBinder main_rdr
484              ; sub_names <- mapM newTopSrcBinder sub_rdrs
485              ; return (AvailTC main_name (main_name : sub_names)) }
486       where
487         (main_rdr : sub_rdrs) = hsTyClDeclBinders tc_decl
488
489     new_ti tc_name_env ti_decl  -- ONLY for type/data instances
490         = do { main_name <- lookupFamInstDeclBndr tc_name_env main_rdr
491              ; sub_names <- mapM newTopSrcBinder sub_rdrs
492              ; return (AvailTC main_name sub_names) }
493                         -- main_name is not bound here!
494       where
495         (main_rdr : sub_rdrs) = hsTyClDeclBinders ti_decl
496
497 get_local_binders _ g = pprPanic "get_local_binders" (ppr g)
498 \end{code}
499
500
501 %************************************************************************
502 %*                                                                      *
503 \subsection{Filtering imports}
504 %*                                                                      *
505 %************************************************************************
506
507 @filterImports@ takes the @ExportEnv@ telling what the imported module makes
508 available, and filters it through the import spec (if any).
509
510 \begin{code}
511 filterImports :: ModIface
512               -> ImpDeclSpec                    -- The span for the entire import decl
513               -> Maybe (Bool, [LIE RdrName])    -- Import spec; True => hiding
514               -> [AvailInfo]                    -- What's available
515               -> RnM (Maybe (Bool, [LIE Name]), -- Import spec w/ Names
516                       GlobalRdrEnv)             -- Same again, but in GRE form
517 filterImports _ decl_spec Nothing all_avails
518   = return (Nothing, mkGlobalRdrEnv (gresFromAvails prov all_avails))
519   where
520     prov = Imported [ImpSpec { is_decl = decl_spec, is_item = ImpAll }]
521
522
523 filterImports iface decl_spec (Just (want_hiding, import_items)) all_avails
524   = do  -- check for errors, convert RdrNames to Names
525         opt_typeFamilies <- xoptM Opt_TypeFamilies
526         items1 <- mapM (lookup_lie opt_typeFamilies) import_items
527
528         let items2 :: [(LIE Name, AvailInfo)]
529             items2 = concat items1
530                 -- NB the AvailInfo may have duplicates, and several items
531                 --    for the same parent; e.g N(x) and N(y)
532
533             names  = availsToNameSet (map snd items2)
534             keep n = not (n `elemNameSet` names)
535             pruned_avails = filterAvails keep all_avails
536             hiding_prov = Imported [ImpSpec { is_decl = decl_spec, is_item = ImpAll }]
537
538             gres | want_hiding = gresFromAvails hiding_prov pruned_avails
539                  | otherwise   = concatMap (gresFromIE decl_spec) items2
540
541         return (Just (want_hiding, map fst items2), mkGlobalRdrEnv gres)
542   where
543         -- This environment is how we map names mentioned in the import
544         -- list to the actual Name they correspond to, and the name family
545         -- that the Name belongs to (the AvailInfo).  The situation is
546         -- complicated by associated families, which introduce a three-level
547         -- hierachy, where class = grand parent, assoc family = parent, and
548         -- data constructors = children.  The occ_env entries for associated
549         -- families needs to capture all this information; hence, we have the
550         -- third component of the environment that gives the class name (=
551         -- grand parent) in case of associated families.
552         --
553         -- This env will have entries for data constructors too,
554         -- they won't make any difference because naked entities like T
555         -- in an import list map to TcOccs, not VarOccs.
556     occ_env :: OccEnv (Name,        -- the name
557                        AvailInfo,   -- the export item providing the name
558                        Maybe Name)  -- the parent of associated types
559     occ_env = mkOccEnv_C combine [ (nameOccName n, (n, a, Nothing))
560                                  | a <- all_avails, n <- availNames a]
561       where
562         -- we know that (1) there are at most entries for one name, (2) their
563         -- first component is identical, (3) they are for tys/cls, and (4) one
564         -- entry has the name in its parent position (the other doesn't)
565         combine (name, AvailTC p1 subs1, Nothing)
566                 (_   , AvailTC p2 subs2, Nothing)
567           = let
568               (parent, subs) = if p1 == name then (p2, subs1) else (p1, subs2)
569             in
570             (name, AvailTC name subs, Just parent)
571         combine x y = pprPanic "filterImports/combine" (ppr x $$ ppr y)
572
573     lookup_lie :: Bool -> LIE RdrName -> TcRn [(LIE Name, AvailInfo)]
574     lookup_lie opt_typeFamilies (L loc ieRdr)
575         = do
576              stuff <- setSrcSpan loc $
577                       case lookup_ie opt_typeFamilies ieRdr of
578                             Failed err  -> addErr err >> return []
579                             Succeeded a -> return a
580              checkDodgyImport stuff
581              return [ (L loc ie, avail) | (ie,avail) <- stuff ]
582         where
583             -- Warn when importing T(..) if T was exported abstractly
584             checkDodgyImport stuff
585                 | IEThingAll n <- ieRdr, (_, AvailTC _ [_]):_ <- stuff
586                 = ifDOptM Opt_WarnDodgyImports (addWarn (dodgyImportWarn n))
587                 -- NB. use the RdrName for reporting the warning
588                 | IEThingAll {} <- ieRdr
589                 = ifDOptM Opt_WarnMissingImportList $
590                   addWarn (missingImportListItem ieRdr)
591             checkDodgyImport _
592                 = return ()
593
594         -- For each import item, we convert its RdrNames to Names,
595         -- and at the same time construct an AvailInfo corresponding
596         -- to what is actually imported by this item.
597         -- Returns Nothing on error.
598         -- We return a list here, because in the case of an import
599         -- item like C, if we are hiding, then C refers to *both* a
600         -- type/class and a data constructor.  Moreover, when we import
601         -- data constructors of an associated family, we need separate
602         -- AvailInfos for the data constructors and the family (as they have
603         -- different parents).  See the discussion at occ_env.
604     lookup_ie :: Bool -> IE RdrName -> MaybeErr Message [(IE Name,AvailInfo)]
605     lookup_ie opt_typeFamilies ie
606       = let bad_ie :: MaybeErr Message a
607             bad_ie = Failed (badImportItemErr iface decl_spec ie all_avails)
608
609             lookup_name rdr
610               | isQual rdr = Failed (qualImportItemErr rdr)
611               | Just nm <- lookupOccEnv occ_env (rdrNameOcc rdr) = return nm
612               | otherwise                                        = bad_ie
613         in
614         case ie of
615          IEVar n -> do
616              (name, avail, _) <- lookup_name n
617              return [(IEVar name, trimAvail avail name)]
618
619          IEThingAll tc -> do
620              (name, avail@(AvailTC name2 subs), mb_parent) <- lookup_name tc
621              case mb_parent of
622                -- non-associated ty/cls
623                Nothing     -> return [(IEThingAll name, avail)]
624                -- associated ty
625                Just parent -> return [(IEThingAll name,
626                                        AvailTC name2 (subs \\ [name])),
627                                       (IEThingAll name, AvailTC parent [name])]
628
629          IEThingAbs tc
630              | want_hiding   -- hiding ( C )
631                         -- Here the 'C' can be a data constructor
632                         --  *or* a type/class, or even both
633              -> let tc_name = lookup_name tc
634                     dc_name = lookup_name (setRdrNameSpace tc srcDataName)
635                 in
636                 case catMaybeErr [ tc_name, dc_name ] of
637                   []    -> bad_ie
638                   names -> return [mkIEThingAbs name | name <- names]
639              | otherwise
640              -> do nameAvail <- lookup_name tc
641                    return [mkIEThingAbs nameAvail]
642
643          IEThingWith tc ns -> do
644             (name, AvailTC _ subnames, mb_parent) <- lookup_name tc
645             let
646               env         = mkOccEnv [(nameOccName s, s) | s <- subnames]
647               mb_children = map (lookupOccEnv env . rdrNameOcc) ns
648             children <- if any isNothing mb_children
649                         then bad_ie
650                         else return (catMaybes mb_children)
651             -- check for proper import of type families
652             when (not opt_typeFamilies && any isTyConName children) $
653               Failed (typeItemErr (head . filter isTyConName $ children)
654                                   (text "in import list"))
655             case mb_parent of
656               -- non-associated ty/cls
657               Nothing     -> return [(IEThingWith name children,
658                                       AvailTC name (name:children))]
659               -- associated ty
660               Just parent -> return [(IEThingWith name children,
661                                       AvailTC name children),
662                                      (IEThingWith name children,
663                                       AvailTC parent [name])]
664
665          _other -> Failed illegalImportItemErr
666          -- could be IEModuleContents, IEGroup, IEDoc, IEDocNamed
667          -- all errors.
668
669       where
670         mkIEThingAbs (n, av, Nothing    ) = (IEThingAbs n, trimAvail av n)
671         mkIEThingAbs (n, _,  Just parent) = (IEThingAbs n, AvailTC parent [n])
672
673
674 catMaybeErr :: [MaybeErr err a] -> [a]
675 catMaybeErr ms =  [ a | Succeeded a <- ms ]
676 \end{code}
677
678 %************************************************************************
679 %*                                                                      *
680 \subsection{Import/Export Utils}
681 %*                                                                      *
682 %************************************************************************
683
684 \begin{code}
685 -- | make a 'GlobalRdrEnv' where all the elements point to the same
686 -- import declaration (useful for "hiding" imports, or imports with
687 -- no details).
688 gresFromAvails :: Provenance -> [AvailInfo] -> [GlobalRdrElt]
689 gresFromAvails prov avails
690   = concatMap (gresFromAvail (const prov)) avails
691
692 gresFromAvail :: (Name -> Provenance) -> AvailInfo -> [GlobalRdrElt]
693 gresFromAvail prov_fn avail
694   = [ GRE {gre_name = n,
695            gre_par = availParent n avail,
696            gre_prov = prov_fn n}
697     | n <- availNames avail ]
698
699 greAvail :: GlobalRdrElt -> AvailInfo
700 greAvail gre = mkUnitAvail (gre_name gre) (gre_par gre)
701
702 mkUnitAvail :: Name -> Parent -> AvailInfo
703 mkUnitAvail me (ParentIs p)              = AvailTC p  [me]
704 mkUnitAvail me NoParent | isTyConName me = AvailTC me [me]
705                         | otherwise      = Avail me
706
707 plusAvail :: GenAvailInfo Name -> GenAvailInfo Name -> GenAvailInfo Name
708 plusAvail (Avail n1)      (Avail _)        = Avail n1
709 plusAvail (AvailTC _ ns1) (AvailTC n2 ns2) = AvailTC n2 (ns1 `unionLists` ns2)
710 plusAvail a1 a2 = pprPanic "RnEnv.plusAvail" (hsep [ppr a1,ppr a2])
711
712 availParent :: Name -> AvailInfo -> Parent
713 availParent _ (Avail _)                 = NoParent
714 availParent n (AvailTC m _) | n == m    = NoParent
715                             | otherwise = ParentIs m
716
717 trimAvail :: AvailInfo -> Name -> AvailInfo
718 trimAvail (Avail n)      _ = Avail n
719 trimAvail (AvailTC n ns) m = ASSERT( m `elem` ns) AvailTC n [m]
720
721 -- | filters 'AvailInfo's by the given predicate
722 filterAvails  :: (Name -> Bool) -> [AvailInfo] -> [AvailInfo]
723 filterAvails keep avails = foldr (filterAvail keep) [] avails
724
725 -- | filters an 'AvailInfo' by the given predicate
726 filterAvail :: (Name -> Bool) -> AvailInfo -> [AvailInfo] -> [AvailInfo]
727 filterAvail keep ie rest =
728   case ie of
729     Avail n | keep n    -> ie : rest
730             | otherwise -> rest
731     AvailTC tc ns ->
732         let left = filter keep ns in
733         if null left then rest else AvailTC tc left : rest
734
735 -- | Given an import\/export spec, construct the appropriate 'GlobalRdrElt's.
736 gresFromIE :: ImpDeclSpec -> (LIE Name, AvailInfo) -> [GlobalRdrElt]
737 gresFromIE decl_spec (L loc ie, avail)
738   = gresFromAvail prov_fn avail
739   where
740     is_explicit = case ie of
741                     IEThingAll name -> \n -> n == name
742                     _               -> \_ -> True
743     prov_fn name = Imported [imp_spec]
744         where
745           imp_spec  = ImpSpec { is_decl = decl_spec, is_item = item_spec }
746           item_spec = ImpSome { is_explicit = is_explicit name, is_iloc = loc }
747
748 mkChildEnv :: [GlobalRdrElt] -> NameEnv [Name]
749 mkChildEnv gres = foldr add emptyNameEnv gres
750     where
751         add (GRE { gre_name = n, gre_par = ParentIs p }) env = extendNameEnv_Acc (:) singleton env p n
752         add _                                            env = env
753
754 findChildren :: NameEnv [Name] -> Name -> [Name]
755 findChildren env n = lookupNameEnv env n `orElse` []
756 \end{code}
757
758 ---------------------------------------
759         AvailEnv and friends
760
761 All this AvailEnv stuff is hardly used; only in a very small
762 part of RnNames.  Todo: remove?
763 ---------------------------------------
764
765 \begin{code}
766 type AvailEnv = NameEnv AvailInfo       -- Maps a Name to the AvailInfo that contains it
767
768 emptyAvailEnv :: AvailEnv
769 emptyAvailEnv = emptyNameEnv
770
771 {- Dead code
772 unitAvailEnv :: AvailInfo -> AvailEnv
773 unitAvailEnv a = unitNameEnv (availName a) a
774
775 plusAvailEnv :: AvailEnv -> AvailEnv -> AvailEnv
776 plusAvailEnv = plusNameEnv_C plusAvail
777
778 availEnvElts :: AvailEnv -> [AvailInfo]
779 availEnvElts = nameEnvElts
780 -}
781
782 addAvail :: AvailEnv -> AvailInfo -> AvailEnv
783 addAvail avails avail = extendNameEnv_C plusAvail avails (availName avail) avail
784
785 mkAvailEnv :: [AvailInfo] -> AvailEnv
786 -- 'avails' may have several items with the same availName
787 -- E.g  import Ix( Ix(..), index )
788 -- will give Ix(Ix,index,range) and Ix(index)
789 -- We want to combine these; addAvail does that
790 mkAvailEnv avails = foldl addAvail emptyAvailEnv avails
791
792 -- After combining the avails, we need to ensure that the parent name is the
793 -- first entry in the list of subnames, if it is included at all.  (Subsequent
794 -- functions rely on that.)
795 normaliseAvail :: AvailInfo -> AvailInfo
796 normaliseAvail avail@(Avail _)     = avail
797 normaliseAvail (AvailTC name subs) = AvailTC name subs'
798   where
799     subs' = if name `elem` subs then name : (delete name subs) else subs
800
801 -- | combines 'AvailInfo's from the same family
802 nubAvails :: [AvailInfo] -> [AvailInfo]
803 nubAvails avails = map normaliseAvail . nameEnvElts . mkAvailEnv $ avails
804 \end{code}
805
806
807 %************************************************************************
808 %*                                                                      *
809 \subsection{Export list processing}
810 %*                                                                      *
811 %************************************************************************
812
813 Processing the export list.
814
815 You might think that we should record things that appear in the export
816 list as ``occurrences'' (using @addOccurrenceName@), but you'd be
817 wrong.  We do check (here) that they are in scope, but there is no
818 need to slurp in their actual declaration (which is what
819 @addOccurrenceName@ forces).
820
821 Indeed, doing so would big trouble when compiling @PrelBase@, because
822 it re-exports @GHC@, which includes @takeMVar#@, whose type includes
823 @ConcBase.StateAndSynchVar#@, and so on...
824
825 \begin{code}
826 type ExportAccum        -- The type of the accumulating parameter of
827                         -- the main worker function in rnExports
828      = ([LIE Name],             -- Export items with Names
829         ExportOccMap,                -- Tracks exported occurrence names
830         [AvailInfo])            -- The accumulated exported stuff
831                                 --   Not nub'd!
832
833 emptyExportAccum :: ExportAccum
834 emptyExportAccum = ([], emptyOccEnv, [])
835
836 type ExportOccMap = OccEnv (Name, IE RdrName)
837         -- Tracks what a particular exported OccName
838         --   in an export list refers to, and which item
839         --   it came from.  It's illegal to export two distinct things
840         --   that have the same occurrence name
841
842 rnExports :: Bool       -- False => no 'module M(..) where' header at all
843           -> Maybe [LIE RdrName]        -- Nothing => no explicit export list
844           -> TcGblEnv
845           -> RnM TcGblEnv
846
847         -- Complains if two distinct exports have same OccName
848         -- Warns about identical exports.
849         -- Complains about exports items not in scope
850
851 rnExports explicit_mod exports
852           tcg_env@(TcGblEnv { tcg_mod     = this_mod,
853                               tcg_rdr_env = rdr_env,
854                               tcg_imports = imports })
855  = do   {
856         -- If the module header is omitted altogether, then behave
857         -- as if the user had written "module Main(main) where..."
858         -- EXCEPT in interactive mode, when we behave as if he had
859         -- written "module Main where ..."
860         -- Reason: don't want to complain about 'main' not in scope
861         --         in interactive mode
862         ; dflags <- getDOpts
863         ; let real_exports
864                  | explicit_mod = exports
865                  | ghcLink dflags == LinkInMemory = Nothing
866                  | otherwise = Just ([noLoc (IEVar main_RDR_Unqual)])
867                         -- ToDo: the 'noLoc' here is unhelpful if 'main'
868                         --       turns out to be out of scope
869
870         ; (rn_exports, avails) <- exports_from_avail real_exports rdr_env imports this_mod
871         ; let final_avails = nubAvails avails    -- Combine families
872
873         ; return (tcg_env { tcg_exports    = final_avails,
874                             tcg_rn_exports = case tcg_rn_exports tcg_env of
875                                                 Nothing -> Nothing
876                                                 Just _  -> rn_exports,
877                             tcg_dus = tcg_dus tcg_env `plusDU`
878                                       usesOnly (availsToNameSet final_avails) }) }
879
880 exports_from_avail :: Maybe [LIE RdrName]
881                          -- Nothing => no explicit export list
882                    -> GlobalRdrEnv
883                    -> ImportAvails
884                    -> Module
885                    -> RnM (Maybe [LIE Name], [AvailInfo])
886
887 exports_from_avail Nothing rdr_env _imports _this_mod
888  = -- The same as (module M) where M is the current module name,
889    -- so that's how we handle it.
890    let
891        avails = [ greAvail gre | gre <- globalRdrEnvElts rdr_env,
892                                  isLocalGRE gre ]
893    in
894    return (Nothing, avails)
895
896 exports_from_avail (Just rdr_items) rdr_env imports this_mod
897   = do (ie_names, _, exports) <- foldlM do_litem emptyExportAccum rdr_items
898
899        return (Just ie_names, exports)
900   where
901     do_litem :: ExportAccum -> LIE RdrName -> RnM ExportAccum
902     do_litem acc lie = setSrcSpan (getLoc lie) (exports_from_item acc lie)
903
904     kids_env :: NameEnv [Name]  -- Maps a parent to its in-scope children
905     kids_env = mkChildEnv (globalRdrEnvElts rdr_env)
906
907     imported_modules = [ qual_name
908                        | xs <- moduleEnvElts $ imp_mods imports,
909                          (qual_name, _, _) <- xs ]
910
911     exports_from_item :: ExportAccum -> LIE RdrName -> RnM ExportAccum
912     exports_from_item acc@(ie_names, occs, exports)
913                       (L loc ie@(IEModuleContents mod))
914         | let earlier_mods = [ mod | (L _ (IEModuleContents mod)) <- ie_names ]
915         , mod `elem` earlier_mods    -- Duplicate export of M
916         = do { warn_dup_exports <- doptM Opt_WarnDuplicateExports ;
917                warnIf warn_dup_exports (dupModuleExport mod) ;
918                return acc }
919
920         | otherwise
921         = do { implicit_prelude <- xoptM Opt_ImplicitPrelude
922              ; warnDodgyExports <- doptM Opt_WarnDodgyExports
923              ; let { exportValid = (mod `elem` imported_modules)
924                             || (moduleName this_mod == mod)
925                    ; gres = filter (isModuleExported implicit_prelude mod)
926                                    (globalRdrEnvElts rdr_env)
927                    ; names = map gre_name gres
928                    }
929
930              ; checkErr exportValid (moduleNotImported mod)
931              ; warnIf (warnDodgyExports && exportValid && null gres) (nullModuleExport mod)
932
933              ; addUsedRdrNames (concat [ [mkRdrQual mod occ, mkRdrUnqual occ]
934                                        | occ <- map nameOccName names ])
935                         -- The qualified and unqualified version of all of
936                         -- these names are, in effect, used by this export
937
938              ; occs' <- check_occs ie occs names
939                       -- This check_occs not only finds conflicts
940                       -- between this item and others, but also
941                       -- internally within this item.  That is, if
942                       -- 'M.x' is in scope in several ways, we'll have
943                       -- several members of mod_avails with the same
944                       -- OccName.
945              ; return (L loc (IEModuleContents mod) : ie_names,
946                        occs', map greAvail gres ++ exports) }
947
948     exports_from_item acc@(lie_names, occs, exports) (L loc ie)
949         | isDoc ie
950         = do new_ie <- lookup_doc_ie ie
951              return (L loc new_ie : lie_names, occs, exports)
952
953         | otherwise
954         = do (new_ie, avail) <- lookup_ie ie
955              if isUnboundName (ieName new_ie)
956                   then return acc    -- Avoid error cascade
957                   else do
958
959              occs' <- check_occs ie occs (availNames avail)
960
961              return (L loc new_ie : lie_names, occs', avail : exports)
962
963     -------------
964     lookup_ie :: IE RdrName -> RnM (IE Name, AvailInfo)
965     lookup_ie (IEVar rdr)
966         = do gre <- lookupGreRn rdr
967              return (IEVar (gre_name gre), greAvail gre)
968
969     lookup_ie (IEThingAbs rdr)
970         = do gre <- lookupGreRn rdr
971              let name = gre_name gre
972              case gre_par gre of
973                 NoParent   -> return (IEThingAbs name,
974                                       AvailTC name [name])
975                 ParentIs p -> return (IEThingAbs name,
976                                       AvailTC p [name])
977
978     lookup_ie ie@(IEThingAll rdr)
979         = do name <- lookupGlobalOccRn rdr
980              let kids = findChildren kids_env name
981                  mkKidRdrName = case isQual_maybe rdr of
982                                 Nothing -> mkRdrUnqual
983                                 Just (modName, _) -> mkRdrQual modName
984              addUsedRdrNames $ map (mkKidRdrName . nameOccName) kids
985              warnDodgyExports <- doptM Opt_WarnDodgyExports
986              when (null kids) $
987                   if isTyConName name
988                   then when warnDodgyExports $ addWarn (dodgyExportWarn name)
989                   else -- This occurs when you export T(..), but
990                        -- only import T abstractly, or T is a synonym.
991                        addErr (exportItemErr ie)
992
993              return (IEThingAll name, AvailTC name (name:kids))
994
995     lookup_ie ie@(IEThingWith rdr sub_rdrs)
996         = do name <- lookupGlobalOccRn rdr
997              if isUnboundName name
998                 then return (IEThingWith name [], AvailTC name [name])
999                 else do
1000              let env = mkOccEnv [ (nameOccName s, s)
1001                                 | s <- findChildren kids_env name ]
1002                  mb_names = map (lookupOccEnv env . rdrNameOcc) sub_rdrs
1003              if any isNothing mb_names
1004                 then do addErr (exportItemErr ie)
1005                         return (IEThingWith name [], AvailTC name [name])
1006                 else do let names = catMaybes mb_names
1007                         optTyFam <- xoptM Opt_TypeFamilies
1008                         when (not optTyFam && any isTyConName names) $
1009                           addErr (typeItemErr ( head
1010                                               . filter isTyConName
1011                                               $ names )
1012                                               (text "in export list"))
1013                         return (IEThingWith name names, AvailTC name (name:names))
1014
1015     lookup_ie _ = panic "lookup_ie"    -- Other cases covered earlier
1016
1017     -------------
1018     lookup_doc_ie :: IE RdrName -> RnM (IE Name)
1019     lookup_doc_ie (IEGroup lev doc) = do rn_doc <- rnHsDoc doc
1020                                          return (IEGroup lev rn_doc)
1021     lookup_doc_ie (IEDoc doc)       = do rn_doc <- rnHsDoc doc
1022                                          return (IEDoc rn_doc)
1023     lookup_doc_ie (IEDocNamed str)  = return (IEDocNamed str)
1024     lookup_doc_ie _ = panic "lookup_doc_ie"    -- Other cases covered earlier
1025
1026
1027 isDoc :: IE RdrName -> Bool
1028 isDoc (IEDoc _)      = True
1029 isDoc (IEDocNamed _) = True
1030 isDoc (IEGroup _ _)  = True
1031 isDoc _ = False
1032
1033 -------------------------------
1034 isModuleExported :: Bool -> ModuleName -> GlobalRdrElt -> Bool
1035 -- True if the thing is in scope *both* unqualified, *and* with qualifier M
1036 isModuleExported implicit_prelude mod (GRE { gre_name = name, gre_prov = prov })
1037   | implicit_prelude && isBuiltInSyntax name = False
1038         -- Optimisation: filter out names for built-in syntax
1039         -- They just clutter up the environment (esp tuples), and the parser
1040         -- will generate Exact RdrNames for them, so the cluttered
1041         -- envt is no use.  To avoid doing this filter all the time,
1042         -- we use -XNoImplicitPrelude as a clue that the filter is
1043         -- worth while.  Really, it's only useful for GHC.Base and GHC.Tuple.
1044         --
1045         -- It's worth doing because it makes the environment smaller for
1046         -- every module that imports the Prelude
1047   | otherwise
1048   = case prov of
1049         LocalDef | Just name_mod <- nameModule_maybe name
1050                  -> moduleName name_mod == mod
1051                  | otherwise -> False
1052         Imported is -> any unQualSpecOK is && any (qualSpecOK mod) is
1053
1054 -------------------------------
1055 check_occs :: IE RdrName -> ExportOccMap -> [Name] -> RnM ExportOccMap
1056 check_occs ie occs names
1057   = foldlM check occs names
1058   where
1059     check occs name
1060       = case lookupOccEnv occs name_occ of
1061           Nothing -> return (extendOccEnv occs name_occ (name, ie))
1062
1063           Just (name', ie')
1064             | name == name'   -- Duplicate export
1065             -- But we don't want to warn if the same thing is exported
1066             -- by two different module exports. See ticket #4478.
1067             -> do unless (diffModules ie ie') $ do
1068                       warn_dup_exports <- doptM Opt_WarnDuplicateExports
1069                       warnIf warn_dup_exports (dupExportWarn name_occ ie ie')
1070                   return occs
1071
1072             | otherwise    -- Same occ name but different names: an error
1073             ->  do { global_env <- getGlobalRdrEnv ;
1074                      addErr (exportClashErr global_env name' name ie' ie) ;
1075                      return occs }
1076       where
1077         name_occ = nameOccName name
1078         -- True if the two IE RdrName are different module exports.
1079         diffModules (IEModuleContents n1) (IEModuleContents n2) = n1 /= n2
1080         diffModules _                     _                     = False
1081 \end{code}
1082
1083 %*********************************************************
1084 %*                                                       *
1085 \subsection{Deprecations}
1086 %*                                                       *
1087 %*********************************************************
1088
1089 \begin{code}
1090 finishWarnings :: DynFlags -> Maybe WarningTxt
1091                -> TcGblEnv -> RnM TcGblEnv
1092 -- (a) Report usage of imports that are deprecated or have other warnings
1093 -- (b) If the whole module is warned about or deprecated, update tcg_warns
1094 --     All this happens only once per module
1095 finishWarnings dflags mod_warn tcg_env
1096   = do  { (eps,hpt) <- getEpsAndHpt
1097         ; ifDOptM Opt_WarnWarningsDeprecations $
1098           mapM_ (check hpt (eps_PIT eps)) all_gres
1099                 -- By this time, typechecking is complete,
1100                 -- so the PIT is fully populated
1101
1102         -- Deal with a module deprecation; it overrides all existing warns
1103         ; let new_warns = case mod_warn of
1104                                 Just txt -> WarnAll txt
1105                                 Nothing  -> tcg_warns tcg_env
1106         ; return (tcg_env { tcg_warns = new_warns }) }
1107   where
1108     used_names = allUses (tcg_dus tcg_env)
1109         -- Report on all deprecated uses; hence allUses
1110     all_gres   = globalRdrEnvElts (tcg_rdr_env tcg_env)
1111
1112     check hpt pit gre@(GRE {gre_name = name, gre_prov = Imported (imp_spec:_)})
1113       | name `elemNameSet` used_names
1114       , Just deprec_txt <- lookupImpDeprec dflags hpt pit gre
1115       = addWarnAt (importSpecLoc imp_spec)
1116                   (sep [ptext (sLit "In the use of") <+>
1117                         pprNonVarNameSpace (occNameSpace (nameOccName name)) <+>
1118                         quotes (ppr name),
1119                       (parens imp_msg) <> colon,
1120                       (ppr deprec_txt) ])
1121         where
1122           name_mod = ASSERT2( isExternalName name, ppr name ) nameModule name
1123           imp_mod  = importSpecModule imp_spec
1124           imp_msg  = ptext (sLit "imported from") <+> ppr imp_mod <> extra
1125           extra | imp_mod == moduleName name_mod = empty
1126                 | otherwise = ptext (sLit ", but defined in") <+> ppr name_mod
1127
1128     check _ _ _ = return ()        -- Local, or not used, or not deprectated
1129             -- The Imported pattern-match: don't deprecate locally defined names
1130             -- For a start, we may be exporting a deprecated thing
1131             -- Also we may use a deprecated thing in the defn of another
1132             -- deprecated things.  We may even use a deprecated thing in
1133             -- the defn of a non-deprecated thing, when changing a module's
1134             -- interface
1135
1136 lookupImpDeprec :: DynFlags -> HomePackageTable -> PackageIfaceTable
1137                 -> GlobalRdrElt -> Maybe WarningTxt
1138 -- The name is definitely imported, so look in HPT, PIT
1139 lookupImpDeprec dflags hpt pit gre
1140   = case lookupIfaceByModule dflags hpt pit mod of
1141         Just iface -> mi_warn_fn iface name `mplus`    -- Bleat if the thing, *or
1142                       case gre_par gre of
1143                         ParentIs p -> mi_warn_fn iface p    -- its parent*, is warn'd
1144                         NoParent   -> Nothing
1145
1146         Nothing -> Nothing    -- See Note [Used names with interface not loaded]
1147   where
1148     name = gre_name gre
1149     mod = ASSERT2( isExternalName name, ppr name ) nameModule name
1150 \end{code}
1151
1152 Note [Used names with interface not loaded]
1153 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1154 By now all the interfaces should have been loaded,
1155 because reportDeprecations happens after typechecking.
1156 However, it's still (just) possible to to find a used
1157 Name whose interface hasn't been loaded:
1158
1159 a) It might be a WiredInName; in that case we may not load
1160    its interface (although we could).
1161
1162 b) It might be GHC.Real.fromRational, or GHC.Num.fromInteger
1163    These are seen as "used" by the renamer (if -XRebindableSyntax)
1164    is on), but the typechecker may discard their uses
1165    if in fact the in-scope fromRational is GHC.Read.fromRational,
1166    (see tcPat.tcOverloadedLit), and the typechecker sees that the type
1167    is fixed, say, to GHC.Base.Float (see Inst.lookupSimpleInst).
1168    In that obscure case it won't force the interface in.
1169
1170 In both cases we simply don't permit deprecations;
1171 this is, after all, wired-in stuff.
1172
1173
1174 %*********************************************************
1175 %*                                                       *
1176 \subsection{Unused names}
1177 %*                                                       *
1178 %*********************************************************
1179
1180 \begin{code}
1181 reportUnusedNames :: Maybe [LIE RdrName]    -- Export list
1182                   -> TcGblEnv -> RnM ()
1183 reportUnusedNames _export_decls gbl_env
1184   = do  { traceRn ((text "RUN") <+> (ppr (tcg_dus gbl_env)))
1185         ; warnUnusedImportDecls gbl_env
1186         ; warnUnusedTopBinds   unused_locals }
1187   where
1188     used_names :: NameSet
1189     used_names = findUses (tcg_dus gbl_env) emptyNameSet
1190     -- NB: currently, if f x = g, we only treat 'g' as used if 'f' is used
1191     -- Hence findUses
1192
1193     -- Collect the defined names from the in-scope environment
1194     defined_names :: [GlobalRdrElt]
1195     defined_names = globalRdrEnvElts (tcg_rdr_env gbl_env)
1196
1197     -- Note that defined_and_used, defined_but_not_used
1198     -- are both [GRE]; that's why we need defined_and_used
1199     -- rather than just used_names
1200     _defined_and_used, defined_but_not_used :: [GlobalRdrElt]
1201     (_defined_and_used, defined_but_not_used)
1202         = partition (gre_is_used used_names) defined_names
1203
1204     kids_env = mkChildEnv defined_names
1205     -- This is done in mkExports too; duplicated work
1206
1207     gre_is_used :: NameSet -> GlobalRdrElt -> Bool
1208     gre_is_used used_names (GRE {gre_name = name})
1209         = name `elemNameSet` used_names
1210           || any (`elemNameSet` used_names) (findChildren kids_env name)
1211                 -- A use of C implies a use of T,
1212                 -- if C was brought into scope by T(..) or T(C)
1213
1214     -- Filter out the ones that are
1215     --  (a) defined in this module, and
1216     --  (b) not defined by a 'deriving' clause
1217     -- The latter have an Internal Name, so we can filter them out easily
1218     unused_locals :: [GlobalRdrElt]
1219     unused_locals = filter is_unused_local defined_but_not_used
1220     is_unused_local :: GlobalRdrElt -> Bool
1221     is_unused_local gre = isLocalGRE gre && isExternalName (gre_name gre)
1222 \end{code}
1223
1224 %*********************************************************
1225 %*                                                       *
1226 \subsection{Unused imports}
1227 %*                                                       *
1228 %*********************************************************
1229
1230 This code finds which import declarations are unused.  The
1231 specification and implementation notes are here:
1232   http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/UnusedImports
1233
1234 \begin{code}
1235 type ImportDeclUsage
1236    = ( LImportDecl Name   -- The import declaration
1237      , [AvailInfo]        -- What *is* used (normalised)
1238      , [Name] )           -- What is imported but *not* used
1239 \end{code}
1240
1241 \begin{code}
1242 warnUnusedImportDecls :: TcGblEnv -> RnM ()
1243 warnUnusedImportDecls gbl_env
1244   = do { uses <- readMutVar (tcg_used_rdrnames gbl_env)
1245        ; let imports = filter explicit_import (tcg_rn_imports gbl_env)
1246              rdr_env = tcg_rdr_env gbl_env
1247
1248        ; let usage :: [ImportDeclUsage]
1249              usage = findImportUsage imports rdr_env (Set.elems uses)
1250
1251        ; ifDOptM Opt_WarnUnusedImports $
1252          mapM_ warnUnusedImport usage
1253
1254        ; ifDOptM Opt_D_dump_minimal_imports $
1255          printMinimalImports usage }
1256   where
1257     explicit_import (L loc _) = isGoodSrcSpan loc
1258         -- Filter out the implicit Prelude import
1259         -- which we do not want to bleat about
1260 \end{code}
1261
1262 \begin{code}
1263 findImportUsage :: [LImportDecl Name]
1264                 -> GlobalRdrEnv
1265                 -> [RdrName]
1266                 -> [ImportDeclUsage]
1267
1268 type ImportMap = Map SrcLoc [AvailInfo]
1269 -- The intermediate data struture records, for each import
1270 -- declaration, what stuff brought into scope by that
1271 -- declaration is actually used in the module.
1272 --
1273 -- The SrcLoc is the location of the start
1274 -- of a particular 'import' declaration
1275 --
1276 -- The AvailInfos are the things imported from that decl
1277 -- (just a list, not normalised)
1278
1279 findImportUsage imports rdr_env rdrs
1280   = map unused_decl imports
1281   where
1282     import_usage :: ImportMap
1283     import_usage = foldr (addUsedRdrName rdr_env) Map.empty rdrs
1284
1285     unused_decl decl@(L loc (ImportDecl { ideclHiding = imps }))
1286       = (decl, nubAvails used_avails, unused_imps)
1287       where
1288         used_avails = Map.lookup (srcSpanStart loc) import_usage `orElse` []
1289         dont_report_as_unused = foldr add emptyNameSet used_avails
1290         add (Avail n) s = s `addOneToNameSet` n
1291         add (AvailTC n ns) s = s `addListToNameSet` (n:ns)
1292        -- If you use 'signum' from Num, then the user may well have
1293        -- imported Num(signum).  We don't want to complain that
1294        -- Num is not itself mentioned.  Hence adding 'n' as
1295        -- well to the list of of "don't report if unused" names
1296
1297         unused_imps = case imps of
1298                         Just (False, imp_ies) -> nameSetToList unused_imps
1299                           where
1300                             imp_names = mkNameSet (concatMap (ieNames . unLoc) imp_ies)
1301                             unused_imps = imp_names `minusNameSet` dont_report_as_unused
1302
1303                         _other -> []    -- No explicit import list => no unused-name list
1304
1305 addUsedRdrName :: GlobalRdrEnv -> RdrName -> ImportMap -> ImportMap
1306 -- For a used RdrName, find all the import decls that brought
1307 -- it into scope; choose one of them (bestImport), and record
1308 -- the RdrName in that import decl's entry in the ImportMap
1309 addUsedRdrName rdr_env rdr imp_map
1310   | [gre] <- lookupGRE_RdrName rdr rdr_env
1311   , Imported imps <- gre_prov gre
1312   = add_imp gre (bestImport imps) imp_map
1313   | otherwise
1314   = imp_map
1315   where
1316     add_imp :: GlobalRdrElt -> ImportSpec -> ImportMap -> ImportMap
1317     add_imp gre (ImpSpec { is_decl = imp_decl_spec }) imp_map
1318       = Map.insertWith add decl_loc [avail] imp_map
1319       where
1320         add _ avails = avail : avails -- add is really just a specialised (++)
1321         decl_loc = srcSpanStart (is_dloc imp_decl_spec)
1322         name     = gre_name gre
1323         avail    = case gre_par gre of
1324                       ParentIs p                  -> AvailTC p [name]
1325                       NoParent | isTyConName name -> AvailTC name [name]
1326                                | otherwise        -> Avail name
1327
1328     bestImport :: [ImportSpec] -> ImportSpec
1329     bestImport iss
1330       = case partition isImpAll iss of
1331           ([], imp_somes) -> textuallyFirst imp_somes
1332           (imp_alls, _)   -> textuallyFirst imp_alls
1333
1334     textuallyFirst :: [ImportSpec] -> ImportSpec
1335     textuallyFirst iss = case sortWith (is_dloc . is_decl) iss of
1336                            []     -> pprPanic "textuallyFirst" (ppr iss)
1337                            (is:_) -> is
1338
1339     isImpAll :: ImportSpec -> Bool
1340     isImpAll (ImpSpec { is_item = ImpAll }) = True
1341     isImpAll _other                         = False
1342 \end{code}
1343
1344 \begin{code}
1345 warnUnusedImport :: ImportDeclUsage -> RnM ()
1346 warnUnusedImport (L loc decl, used, unused)
1347   | Just (False,[]) <- ideclHiding decl
1348                 = return ()            -- Do not warn for 'import M()'
1349   | null used   = addWarnAt loc msg1   -- Nothing used; drop entire decl
1350   | null unused = return ()            -- Everything imported is used; nop
1351   | otherwise   = addWarnAt loc msg2   -- Some imports are unused
1352   where
1353     msg1 = vcat [pp_herald <+> quotes pp_mod <+> pp_not_used,
1354                  nest 2 (ptext (sLit "except perhaps to import instances from")
1355                                    <+> quotes pp_mod),
1356                  ptext (sLit "To import instances alone, use:")
1357                                    <+> ptext (sLit "import") <+> pp_mod <> parens empty ]
1358     msg2 = sep [pp_herald <+> quotes (pprWithCommas ppr unused),
1359                     text "from module" <+> quotes pp_mod <+> pp_not_used]
1360     pp_herald   = text "The import of"
1361     pp_mod      = ppr (unLoc (ideclName decl))
1362     pp_not_used = text "is redundant"
1363 \end{code}
1364
1365 To print the minimal imports we walk over the user-supplied import
1366 decls, and simply trim their import lists.  NB that
1367
1368   * We do *not* change the 'qualified' or 'as' parts!
1369
1370   * We do not disard a decl altogether; we might need instances
1371     from it.  Instead we just trim to an empty import list
1372
1373 \begin{code}
1374 printMinimalImports :: [ImportDeclUsage] -> RnM ()
1375 printMinimalImports imports_w_usage
1376   = do { imports' <- mapM mk_minimal imports_w_usage
1377        ; this_mod <- getModule
1378        ; liftIO $
1379          do { h <- openFile (mkFilename this_mod) WriteMode
1380             ; printForUser h neverQualify (vcat (map ppr imports')) }
1381               -- The neverQualify is important.  We are printing Names
1382               -- but they are in the context of an 'import' decl, and
1383               -- we never qualify things inside there
1384               -- E.g.   import Blag( f, b )
1385               -- not    import Blag( Blag.f, Blag.g )!
1386        }
1387   where
1388     mkFilename this_mod = moduleNameString (moduleName this_mod) ++ ".imports"
1389
1390     mk_minimal (L l decl, used, unused)
1391       | null unused
1392       , Just (False, _) <- ideclHiding decl
1393       = return (L l decl)
1394       | otherwise
1395       = do { let ImportDecl { ideclName    = L _ mod_name
1396                             , ideclSource  = is_boot
1397                             , ideclPkgQual = mb_pkg } = decl
1398            ; iface <- loadSrcInterface doc mod_name is_boot mb_pkg
1399            ; let lies = map (L l) (concatMap (to_ie iface) used)
1400            ; return (L l (decl { ideclHiding = Just (False, lies) })) }
1401       where
1402         doc = text "Compute minimal imports for" <+> ppr decl
1403
1404     to_ie :: ModIface -> AvailInfo -> [IE Name]
1405     -- The main trick here is that if we're importing all the constructors
1406     -- we want to say "T(..)", but if we're importing only a subset we want
1407     -- to say "T(A,B,C)".  So we have to find out what the module exports.
1408     to_ie _ (Avail n)
1409        = [IEVar n]
1410     to_ie _ (AvailTC n [m])
1411        | n==m = [IEThingAbs n]
1412     to_ie iface (AvailTC n ns)
1413       = case [xs | (m,as) <- mi_exports iface
1414                  , m == n_mod
1415                  , AvailTC x xs <- as
1416                  , x == nameOccName n
1417                  , x `elem` xs    -- Note [Partial export]
1418                  ] of
1419            [xs] | all_used xs -> [IEThingAll n]
1420                 | otherwise   -> [IEThingWith n (filter (/= n) ns)]
1421            _other             -> (map IEVar ns)
1422         where
1423           all_used avail_occs = all (`elem` map nameOccName ns) avail_occs
1424           n_mod = ASSERT( isExternalName n ) nameModule n
1425 \end{code}
1426
1427 Note [Partial export]
1428 ~~~~~~~~~~~~~~~~~~~~~
1429 Suppose we have
1430
1431    module A( op ) where
1432      class C a where
1433        op :: a -> a
1434
1435    module B where
1436    import A
1437    f = ..op...
1438
1439 Then the minimal import for module B is
1440    import A( op )
1441 not
1442    import A( C( op ) )
1443 which we would usually generate if C was exported from B.  Hence
1444 the (x `elem` xs) test when deciding what to generate.
1445
1446
1447 %************************************************************************
1448 %*                                                                      *
1449 \subsection{Errors}
1450 %*                                                                      *
1451 %************************************************************************
1452
1453 \begin{code}
1454 qualImportItemErr :: RdrName -> SDoc
1455 qualImportItemErr rdr
1456   = hang (ptext (sLit "Illegal qualified name in import item:"))
1457        2 (ppr rdr)
1458
1459 badImportItemErrStd :: ModIface -> ImpDeclSpec -> IE RdrName -> SDoc
1460 badImportItemErrStd iface decl_spec ie
1461   = sep [ptext (sLit "Module"), quotes (ppr (is_mod decl_spec)), source_import,
1462          ptext (sLit "does not export"), quotes (ppr ie)]
1463   where
1464     source_import | mi_boot iface = ptext (sLit "(hi-boot interface)")
1465                   | otherwise     = empty
1466
1467 badImportItemErrDataCon :: OccName -> ModIface -> ImpDeclSpec -> IE RdrName -> SDoc
1468 badImportItemErrDataCon dataType iface decl_spec ie
1469   = vcat [ ptext (sLit "In module")
1470              <+> quotes (ppr (is_mod decl_spec))
1471              <+> source_import <> colon
1472          , nest 2 $ quotes datacon
1473              <+> ptext (sLit "is a data constructor of")
1474              <+> quotes (ppr dataType)
1475          , ptext (sLit "To import it use")
1476          , nest 2 $ quotes (ptext (sLit "import")
1477              <+> ppr (is_mod decl_spec)
1478              <+> parens (ppr dataType <+> parens datacon))
1479          , ptext (sLit "or")
1480          , nest 2 $ quotes (ptext (sLit "import")
1481              <+> ppr (is_mod decl_spec)
1482              <+> parens (ppr dataType <+> parens (ptext $ sLit "..")))
1483          ]
1484   where
1485     datacon = ppr . rdrNameOcc $ ieName ie
1486     source_import | mi_boot iface = ptext (sLit "(hi-boot interface)")
1487                   | otherwise     = empty
1488
1489 badImportItemErr :: ModIface -> ImpDeclSpec -> IE RdrName -> [AvailInfo] -> SDoc
1490 badImportItemErr iface decl_spec ie avails
1491   = case find checkIfDataCon avails of
1492       Just con -> badImportItemErrDataCon (availOccName con) iface decl_spec ie
1493       Nothing  -> badImportItemErrStd iface decl_spec ie
1494   where
1495     checkIfDataCon (AvailTC _ ns) =
1496       case find (\n -> importedFS == nameOccNameFS n) ns of
1497         Just n  -> isDataConName n
1498         Nothing -> False
1499     checkIfDataCon _ = False
1500     availOccName = nameOccName . availName
1501     nameOccNameFS = occNameFS . nameOccName
1502     importedFS = occNameFS . rdrNameOcc $ ieName ie
1503
1504 illegalImportItemErr :: SDoc
1505 illegalImportItemErr = ptext (sLit "Illegal import item")
1506
1507 dodgyImportWarn :: RdrName -> SDoc
1508 dodgyImportWarn item = dodgyMsg (ptext (sLit "import")) item
1509 dodgyExportWarn :: Name -> SDoc
1510 dodgyExportWarn item = dodgyMsg (ptext (sLit "export")) item
1511
1512 dodgyMsg :: OutputableBndr n => SDoc -> n -> SDoc
1513 dodgyMsg kind tc
1514   = sep [ ptext (sLit "The") <+> kind <+> ptext (sLit "item") <+> quotes (ppr (IEThingAll tc))
1515                 <+> ptext (sLit "suggests that"),
1516           quotes (ppr tc) <+> ptext (sLit "has (in-scope) constructors or class methods,"),
1517           ptext (sLit "but it has none") ]
1518
1519 exportItemErr :: IE RdrName -> SDoc
1520 exportItemErr export_item
1521   = sep [ ptext (sLit "The export item") <+> quotes (ppr export_item),
1522           ptext (sLit "attempts to export constructors or class methods that are not visible here") ]
1523
1524 typeItemErr :: Name -> SDoc -> SDoc
1525 typeItemErr name wherestr
1526   = sep [ ptext (sLit "Using 'type' tag on") <+> quotes (ppr name) <+> wherestr,
1527           ptext (sLit "Use -XTypeFamilies to enable this extension") ]
1528
1529 exportClashErr :: GlobalRdrEnv -> Name -> Name -> IE RdrName -> IE RdrName
1530                -> Message
1531 exportClashErr global_env name1 name2 ie1 ie2
1532   = vcat [ ptext (sLit "Conflicting exports for") <+> quotes (ppr occ) <> colon
1533          , ppr_export ie1' name1'
1534          , ppr_export ie2' name2' ]
1535   where
1536     occ = nameOccName name1
1537     ppr_export ie name = nest 2 (quotes (ppr ie) <+> ptext (sLit "exports") <+>
1538                                  quotes (ppr name) <+> pprNameProvenance (get_gre name))
1539
1540     -- get_gre finds a GRE for the Name, so that we can show its provenance
1541     get_gre name
1542         = case lookupGRE_Name global_env name of
1543              (gre:_) -> gre
1544              []      -> pprPanic "exportClashErr" (ppr name)
1545     get_loc name = greSrcSpan (get_gre name)
1546     (name1', ie1', name2', ie2') = if get_loc name1 < get_loc name2
1547                                    then (name1, ie1, name2, ie2)
1548                                    else (name2, ie2, name1, ie1)
1549
1550 -- the SrcSpan that pprNameProvenance prints out depends on whether
1551 -- the Name is defined locally or not: for a local definition the
1552 -- definition site is used, otherwise the location of the import
1553 -- declaration.  We want to sort the export locations in
1554 -- exportClashErr by this SrcSpan, we need to extract it:
1555 greSrcSpan :: GlobalRdrElt -> SrcSpan
1556 greSrcSpan gre
1557   | Imported (is:_) <- gre_prov gre = is_dloc (is_decl is)
1558   | otherwise                       = name_span
1559   where
1560     name_span = nameSrcSpan (gre_name gre)
1561
1562 addDupDeclErr :: [Name] -> TcRn ()
1563 addDupDeclErr []
1564   = panic "addDupDeclErr: empty list"
1565 addDupDeclErr names@(name : _)
1566   = addErrAt (getSrcSpan (last sorted_names)) $
1567     -- Report the error at the later location
1568     vcat [ptext (sLit "Multiple declarations of") <+> quotes (ppr name),
1569           ptext (sLit "Declared at:") <+> vcat (map (ppr . nameSrcLoc) sorted_names)]
1570   where
1571     sorted_names = sortWith nameSrcLoc names
1572
1573 dupExportWarn :: OccName -> IE RdrName -> IE RdrName -> SDoc
1574 dupExportWarn occ_name ie1 ie2
1575   = hsep [quotes (ppr occ_name),
1576           ptext (sLit "is exported by"), quotes (ppr ie1),
1577           ptext (sLit "and"),            quotes (ppr ie2)]
1578
1579 dupModuleExport :: ModuleName -> SDoc
1580 dupModuleExport mod
1581   = hsep [ptext (sLit "Duplicate"),
1582           quotes (ptext (sLit "Module") <+> ppr mod),
1583           ptext (sLit "in export list")]
1584
1585 moduleNotImported :: ModuleName -> SDoc
1586 moduleNotImported mod
1587   = ptext (sLit "The export item `module") <+> ppr mod <>
1588     ptext (sLit "' is not imported")
1589
1590 nullModuleExport :: ModuleName -> SDoc
1591 nullModuleExport mod
1592   = ptext (sLit "The export item `module") <+> ppr mod <> ptext (sLit "' exports nothing")
1593
1594 missingImportListWarn :: ModuleName -> SDoc
1595 missingImportListWarn mod
1596   = ptext (sLit "The module") <+> quotes (ppr mod) <+> ptext (sLit "does not have an explicit import list")
1597
1598 missingImportListItem :: IE RdrName -> SDoc
1599 missingImportListItem ie
1600   = ptext (sLit "The import item") <+> quotes (ppr ie) <+> ptext (sLit "does not have an explicit import list")
1601
1602 moduleWarn :: ModuleName -> WarningTxt -> SDoc
1603 moduleWarn mod (WarningTxt txt)
1604   = sep [ ptext (sLit "Module") <+> quotes (ppr mod) <> ptext (sLit ":"),
1605           nest 2 (vcat (map ppr txt)) ]
1606 moduleWarn mod (DeprecatedTxt txt)
1607   = sep [ ptext (sLit "Module") <+> quotes (ppr mod)
1608                                 <+> ptext (sLit "is deprecated:"),
1609           nest 2 (vcat (map ppr txt)) ]
1610
1611 implicitPreludeWarn :: SDoc
1612 implicitPreludeWarn
1613   = ptext (sLit "Module `Prelude' implicitly imported")
1614
1615 packageImportErr :: SDoc
1616 packageImportErr
1617   = ptext (sLit "Package-qualified imports are not enabled; use -XPackageImports")
1618 \end{code}