Safe Haskell | None |
---|---|
Language | GHC2021 |
GHC.Unit.Module.Deps
Description
Dependencies and Usage of a module
Synopsis
- data Dependencies where
- pattern Dependencies :: Set (IfaceImportLevel, UnitId, ModuleNameWithIsBoot) -> Set (IfaceImportLevel, UnitId) -> Set UnitId -> [ModuleName] -> Set UnitId -> Set (UnitId, ModuleNameWithIsBoot) -> [Module] -> [Module] -> Dependencies
- dep_orphs_update :: Monad m => Dependencies -> ([Module] -> m [Module]) -> m Dependencies
- dep_finsts_update :: Monad m => Dependencies -> ([Module] -> m [Module]) -> m Dependencies
- mkDependencies :: HomeUnit -> Module -> ImportAvails -> [Module] -> Dependencies
- noDependencies :: Dependencies
- pprDeps :: UnitState -> Dependencies -> SDoc
- data Usage
- = UsagePackageModule { }
- | UsageHomeModule { }
- | UsageFile { }
- | UsageHomeModuleInterface { }
- | UsageMergedRequirement { }
- data HomeModImport = HomeModImport {}
- data HomeModImportedAvails
- data ImportAvails = ImportAvails {
- imp_mods :: ImportedMods
- imp_direct_dep_mods :: InstalledModuleEnv (Set ImportLevel, ModuleNameWithIsBoot)
- imp_dep_direct_pkgs :: Set (ImportLevel, UnitId)
- imp_trust_own_pkg :: Bool
- imp_trust_pkgs :: Set UnitId
- imp_boot_mods :: InstalledModuleEnv ModuleNameWithIsBoot
- imp_sig_mods :: [ModuleName]
- imp_orphs :: [Module]
- imp_finsts :: [Module]
- newtype IfaceImportLevel = IfaceImportLevel ImportLevel
- tcImportLevel :: IfaceImportLevel -> ImportLevel
Documentation
data Dependencies where Source #
Dependency information about ALL modules and packages below this one
in the import hierarchy. This is the serialisable version of ImportAvails
.
Invariant: the dependencies of a module M
never includes M
.
Invariant: none of the lists contain duplicates.
Invariant: lists are ordered canonically (e.g. using stableModuleCmp)
See Note [Transitive Information in Dependencies]
Bundled Patterns
pattern Dependencies :: Set (IfaceImportLevel, UnitId, ModuleNameWithIsBoot) -> Set (IfaceImportLevel, UnitId) -> Set UnitId -> [ModuleName] -> Set UnitId -> Set (UnitId, ModuleNameWithIsBoot) -> [Module] -> [Module] -> Dependencies |
Instances
NFData Dependencies Source # | |
Defined in GHC.Unit.Module.Deps Methods rnf :: Dependencies -> () Source # | |
Binary Dependencies Source # | |
Defined in GHC.Unit.Module.Deps Methods put_ :: WriteBinHandle -> Dependencies -> IO () Source # put :: WriteBinHandle -> Dependencies -> IO (Bin Dependencies) Source # get :: ReadBinHandle -> IO Dependencies Source # | |
Eq Dependencies Source # | |
Defined in GHC.Unit.Module.Deps |
dep_orphs_update :: Monad m => Dependencies -> ([Module] -> m [Module]) -> m Dependencies Source #
Update module dependencies containing orphans (used by Backpack)
dep_finsts_update :: Monad m => Dependencies -> ([Module] -> m [Module]) -> m Dependencies Source #
Update module dependencies containing family instances (used by Backpack)
mkDependencies :: HomeUnit -> Module -> ImportAvails -> [Module] -> Dependencies Source #
Extract information from the rename and typecheck phases to produce a dependencies information for the module being compiled.
The fourth argument is a list of plugin modules.
Records modules for which changes may force recompilation of this module See wiki: https://gitlab.haskell.org/ghc/ghc/wikis/commentary/compiler/recompilation-avoidance
This differs from Dependencies. A module X may be in the dep_mods of this module (via an import chain) but if we don't use anything from X it won't appear in our Usage
Constructors
UsagePackageModule | Module from another package |
Fields
| |
UsageHomeModule | Module from the current package |
Fields
| |
UsageFile | A file upon which the module depends, e.g. a CPP #include, or using TH's
|
Fields
| |
UsageHomeModuleInterface | |
Fields
| |
UsageMergedRequirement | A requirement which was merged into this one. |
Fields
|
data HomeModImport Source #
Records the imports that we depend on from a home module, for recompilation checking.
See Note [When to recompile when export lists change?] in GHC.Iface.Recomp.
Constructors
HomeModImport | |
Fields
|
Instances
NFData HomeModImport Source # | |
Defined in GHC.Unit.Module.Deps Methods rnf :: HomeModImport -> () Source # | |
Binary HomeModImport Source # | |
Defined in GHC.Unit.Module.Deps Methods put_ :: WriteBinHandle -> HomeModImport -> IO () Source # put :: WriteBinHandle -> HomeModImport -> IO (Bin HomeModImport) Source # get :: ReadBinHandle -> IO HomeModImport Source # | |
Outputable HomeModImport Source # | |
Defined in GHC.Unit.Module.Deps Methods ppr :: HomeModImport -> SDoc Source # | |
Eq HomeModImport Source # | |
Defined in GHC.Unit.Module.Deps Methods (==) :: HomeModImport -> HomeModImport -> Bool # (/=) :: HomeModImport -> HomeModImport -> Bool # |
data HomeModImportedAvails Source #
Records all the Avail
s we are importing from a home module.
Constructors
HMIA_Explicit | All import lists are explicit import lists, but some identifiers
may still be implicitly imported, e.g. In this case, recompilation is keyed by the names we are importing,
with their |
Fields
| |
HMIA_Implicit | One import is a whole module import, or a In this case, recompilation is keyed on the hash of the exported avails of the module we are importing. |
Fields
|
Instances
NFData HomeModImportedAvails Source # | |
Defined in GHC.Unit.Module.Deps Methods rnf :: HomeModImportedAvails -> () Source # | |
Binary HomeModImportedAvails Source # | |
Defined in GHC.Unit.Module.Deps Methods put_ :: WriteBinHandle -> HomeModImportedAvails -> IO () Source # put :: WriteBinHandle -> HomeModImportedAvails -> IO (Bin HomeModImportedAvails) Source # | |
Outputable HomeModImportedAvails Source # | |
Defined in GHC.Unit.Module.Deps Methods ppr :: HomeModImportedAvails -> SDoc Source # | |
Eq HomeModImportedAvails Source # | |
Defined in GHC.Unit.Module.Deps Methods (==) :: HomeModImportedAvails -> HomeModImportedAvails -> Bool # (/=) :: HomeModImportedAvails -> HomeModImportedAvails -> Bool # |
data ImportAvails Source #
ImportAvails
summarises what was imported from where, irrespective of
whether the imported things are actually used or not. It is used:
- when processing the export list,
- when constructing usage info for the interface file,
- to identify the list of directly imported modules for initialisation purposes and for optimised overlap checking of family instances,
- when figuring out what things are really unused
Constructors
ImportAvails | |
Fields
|
newtype IfaceImportLevel Source #
Constructors
IfaceImportLevel ImportLevel |