module HscTypes (
GhciMode(..),
- ModuleLocation(..),
+ ModuleLocation(..), showModMsg,
ModDetails(..), ModIface(..),
HomeSymbolTable, emptySymbolTable,
import Name ( Name, NamedThing, getName, nameOccName, nameModule, nameSrcLoc )
import NameEnv
import OccName ( OccName )
-import Module ( Module, ModuleName, ModuleEnv,
- lookupModuleEnv, lookupModuleEnvByName, emptyModuleEnv
- )
+import Module
import InstEnv ( InstEnv, ClsInstEnv, DFunId )
import Rules ( RuleBase )
import CoreSyn ( CoreBind )
import Maybes ( seqMaybe, orElse )
import Outputable
import SrcLoc ( SrcLoc, isGoodSrcLoc )
-import Util ( thenCmp, sortLt )
+import Util ( thenCmp, sortLt, unJust )
import UniqSupply ( UniqSupply )
\end{code}
instance Outputable ModuleLocation where
ppr = text . show
+
+-- Probably doesn't really belong here, but used in HscMain and InteractiveUI.
+
+showModMsg :: Bool -> Module -> ModuleLocation -> String
+showModMsg use_object mod location =
+ mod_str ++ replicate (max 0 (16 - length mod_str)) ' '
+ ++" ( " ++ unJust "showModMsg" (ml_hs_file location) ++ ", "
+ ++ (if use_object
+ then unJust "showModMsg" (ml_obj_file location)
+ else "interpreted")
+ ++ " )"
+ where mod_str = moduleUserString mod
\end{code}
For a module in another package, the hs_file and obj_file
\begin{code}
data ModIface
= ModIface {
- mi_module :: !Module, -- Complete with package info
+ mi_module :: !Module,
+ mi_package :: !PackageName, -- Which package the module comes from
mi_version :: !VersionInfo, -- Module version number
+
mi_orphan :: WhetherHasOrphans, -- Whether this module has orphans
+ -- NOT STRICT! we fill this field with _|_ sometimes
+
mi_boot :: !IsBootInterface, -- read from an hi-boot file?
mi_usages :: ![ImportVersion Name],
-- What it exports Kept sorted by (mod,occ), to make
-- version comparisons easier
- mi_globals :: !GlobalRdrEnv, -- Its top level environment
+ mi_globals :: !(Maybe GlobalRdrEnv),
+ -- Its top level environment or Nothing if we read this
+ -- interface from a file.
mi_fixities :: !(NameEnv Fixity), -- Fixities
mi_deprecs :: !Deprecations, -- Deprecations
mi_decls :: IfaceDecls -- The RnDecls form of ModDetails
+ -- NOT STRICT! we fill this field with _|_ sometimes
}
data IfaceDecls = IfaceDecls { dcl_tycl :: [RenamedTyClDecl], -- Sorted
emptyModIface :: Module -> ModIface
emptyModIface mod
= ModIface { mi_module = mod,
+ mi_package = preludePackage, -- XXX fully bogus
mi_version = initialVersionInfo,
mi_usages = [],
mi_orphan = False,
mi_boot = False,
mi_exports = [],
mi_fixities = emptyNameEnv,
- mi_globals = emptyRdrEnv,
+ mi_globals = Nothing,
mi_deprecs = NoDeprecs,
mi_decls = panic "emptyModIface: decls"
}
\begin{code}
data InteractiveContext
= InteractiveContext {
- ic_module :: Module, -- The current module in which
- -- the user is sitting
+ ic_toplev_scope :: [Module], -- Include the "top-level" scope of
+ -- these modules
+
+ ic_exports :: [Module], -- Include just the exports of these
+ -- modules
+
+ ic_rn_gbl_env :: GlobalRdrEnv, -- The cached GlobalRdrEnv, built from
+ -- ic_toplev_scope and ic_exports
+
+ ic_print_unqual :: PrintUnqualified,
+ -- cached PrintUnqualified, as above
- ic_rn_env :: LocalRdrEnv, -- Lexical context for variables bound
+ ic_rn_local_env :: LocalRdrEnv, -- Lexical context for variables bound
-- during interaction
ic_type_env :: TypeEnv -- Ditto for types