HORIZON HASKELLDocslts/ghc-9.14.x3e2d5682026-10-11Search names, modules, packages, or :: a typeCtrl K

GHC 9.14.1 · lts/ghc-9.14.x · 3e2d568 · 2026-10-11

Moduleghc-lib-parser-9.14.1.20251220GHC2021

GHC.Unit.Module.Deps

Dependencies and Usage of a module

  • 6 types
  • 14 values
datadata Dependencies
#

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]

Instances3Eq, NFData, Binary
datadata Usage
#

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

Instances3Eq, NFData, Binary
  • Eq UsageDefined in ghc-lib-parser-9.14.1.20251220 · GHC.Unit.Module.Deps
  • NFData UsageDefined in ghc-lib-parser-9.14.1.20251220 · GHC.Unit.Module.Deps
  • Binary UsageDefined in ghc-lib-parser-9.14.1.20251220 · GHC.Unit.Module.Deps
datadata HomeModImport
#

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

Instances4Eq, NFData, Outputable, Binary

Records all the Avails we are importing from a home module.

Constructors

Instances4Eq, NFData, Outputable, Binary
datadata ImportAvails
#

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
    • imp_mods :: ImportedMods

      Domain is all directly-imported modules

      See the documentation on ImportedModsVal in GHC.Unit.Module.Imported for the meaning of the fields.

      We need a full ModuleEnv rather than a ModuleNameEnv here, because we might be importing modules of the same name from different packages. (currently not the case, but might be in the future).

    • imp_direct_dep_mods :: InstalledModuleEnv (Set ImportLevel, ModuleNameWithIsBoot)

      Home-package modules directly imported by the module being compiled.

    • imp_dep_direct_pkgs :: Set (ImportLevel, UnitId)

      Packages directly needed by the module being compiled

    • imp_trust_own_pkg :: Bool

      Do we require that our own package is trusted? This is to handle efficiently the case where a Safe module imports a Trustworthy module that resides in the same package as it. See Note [Trust Own Package] in GHC.Rename.Names

    • imp_trust_pkgs :: Set UnitId

      This records the packages the current module needs to trust for Safe Haskell compilation to succeed. A package is required to be trusted if we are dependent on a trustworthy module in that package. See Note [Tracking Trust Transitively] in GHC.Rename.Names

    • imp_boot_mods :: InstalledModuleEnv ModuleNameWithIsBoot

      Domain is all modules which have hs-boot files, and whether we should import the boot version of interface file. Only used in one-shot mode to populate eps_is_boot.

    • imp_sig_mods :: [ModuleName]

      Signature modules below this one

    • imp_orphs :: [Module]

      Orphan modules below us in the import tree (and maybe including us for imported modules)

    • imp_finsts :: [Module]

      Family instance modules below us in the import tree (and maybe including us for imported modules)

newtypenewtype IfaceImportLevel
#
Instances5Eq, Ord, NFData, Outputable, Binary