-qualifyImports :: ModuleName -- Imported module
- -> Bool -- True <=> want unqualified import
- -> Maybe ModuleName -- Optional "as M" part
- -> [AvailInfo] -- What's to be hidden
- -> (Name -> Provenance)
- -> Avails -- Whats imported and how
- -> RnMG (GlobalRdrEnv, ExportAvails)
-
-qualifyImports this_mod unqual_imp as_mod hides mk_provenance avails
- =
- -- Make the name environment. We're talking about a
- -- single module here, so there must be no name clashes.
- -- In practice there only ever will be if it's the module
- -- being compiled.
- let
- -- Add the things that are available
- name_env1 = foldl add_avail emptyRdrEnv avails
-
- -- Delete things that are hidden
- name_env2 = foldl del_avail name_env1 hides
-
- -- Create the export-availability info
- export_avails = mkExportAvails qual_mod unqual_imp name_env2 avails
- in
- returnRn (name_env2, export_avails)
-
- where
- qual_mod = case as_mod of
- Nothing -> this_mod
- Just another_name -> another_name
-
- add_avail :: GlobalRdrEnv -> AvailInfo -> GlobalRdrEnv
- add_avail env avail = foldl add_name env (availNames avail)
-
- add_name env name
- | unqual_imp = env2
- | otherwise = env1
- where
- env1 = addOneToGlobalRdrEnv env (mkRdrQual qual_mod occ) (name,prov)
- env2 = addOneToGlobalRdrEnv env1 (mkRdrUnqual occ) (name,prov)
- occ = nameOccName name
- prov = mk_provenance name
-
- del_avail env avail = foldl delOneFromGlobalRdrEnv env rdr_names
- where
- rdr_names = map (mkRdrUnqual . nameOccName) (availNames avail)
+type ExportAvails
+ = (FiniteMap ModuleName Avails,
+ -- Used to figure out "module M" export specifiers
+ -- Includes avails only from *unqualified* imports
+ -- (see 1.4 Report Section 5.1.1)