| Safe Haskell | None |
|---|---|
| Language | GHC2021 |
GHC.Unit.Env
Description
A UnitEnv provides the complete interface into everything that is loaded
into a GHC session, including the HomeUnitGraph for mapping home units to their
HomePackageTables (which store information about all home modules), and
the ExternalPackageState which provides access to all external packages
loaded.
This module is meant to be imported as UnitEnv when calling insertHpt:
import GHC.Unit.Env (UnitEnv, HomeUnitGraph, HomeUnitEnv) import GHC.Unit.Env as UnitEnv
Here is an overview of how the UnitEnv, ModuleGraph, HUG, HPT, and EPS interact:
┌────────────────┐┌────────────────────┐┌───────────┐ │HomePackageTable││ExternalPackageState││ModuleGraph│ └┬───────────────┘└┬───────────────────┘└┬──────────┘ ┌▽────────────┐ │ │ │HomeUnitGraph│ │ │ └┬────────────┘ │ │ ┌▽─────────────────▽─────────────────────▽┐ │UnitEnv │ └┬─────────────-──────────────────────────┘ │ │ ┌▽──────────────────────────────────────▽┐ │HscEnv │ └────────────────────────────────────────┘
The UnitEnv references the HomeUnitGraph (with all the home unit
modules), the ExternalPackageState (information about all
non-home/external units), and the ModuleGraph (which describes the
relationship between the modules being compiled).
The HscEnv references this UnitEnv.
The HomeUnitGraph has one HomePackageTable for every unit.
Synopsis
- data UnitEnv = UnitEnv {}
- initUnitEnv :: UnitId -> HomeUnitGraph -> GhcNameVersion -> Platform -> IO UnitEnv
- ueEPS :: UnitEnv -> IO ExternalPackageState
- updateHug :: (HomeUnitGraph -> HomeUnitGraph) -> UnitEnv -> UnitEnv
- ue_currentHomeUnitEnv :: HasDebugCallStack => UnitEnv -> HomeUnitEnv
- ue_hpt :: HasDebugCallStack => UnitEnv -> HomePackageTable
- ue_setActiveUnit :: UnitId -> UnitEnv -> UnitEnv
- ue_currentUnit :: UnitEnv -> UnitId
- ue_findHomeUnitEnv :: HasDebugCallStack => UnitId -> UnitEnv -> HomeUnitEnv
- ue_unitHomeUnit :: UnitId -> UnitEnv -> HomeUnit
- ue_unitHomeUnit_maybe :: UnitId -> UnitEnv -> Maybe HomeUnit
- ue_updateHomeUnitEnv :: (HomeUnitEnv -> HomeUnitEnv) -> UnitId -> UnitEnv -> UnitEnv
- ue_all_home_unit_ids :: UnitEnv -> Set UnitId
- ue_unsafeHomeUnit :: UnitEnv -> HomeUnit
- type HomeUnitGraph = UnitEnvGraph HomeUnitEnv
- data HomeUnitEnv = HomeUnitEnv {}
- assertUnitEnvInvariant :: HasDebugCallStack => UnitEnv -> UnitEnv
- preloadUnitsInfo :: UnitEnv -> MaybeErr UnitErr [UnitInfo]
- preloadUnitsInfo' :: UnitEnv -> [UnitId] -> MaybeErr UnitErr [UnitInfo]
- isUnitEnvInstalledModule :: UnitEnv -> InstalledModule -> Bool
- renameUnitId :: HasDebugCallStack => UnitId -> UnitId -> UnitEnv -> UnitEnv
- insertHpt :: HasDebugCallStack => HomeModInfo -> UnitEnv -> IO ()
- ue_setFlags :: HasDebugCallStack => DynFlags -> UnitEnv -> UnitEnv
- ue_homeUnitState :: HasDebugCallStack => UnitEnv -> UnitState
- ue_unit_dbs :: UnitEnv -> Maybe [UnitDatabase UnitId]
- ue_homeUnit :: UnitEnv -> Maybe HomeUnit
- ue_unitFlags :: HasDebugCallStack => UnitId -> UnitEnv -> DynFlags
- ue_transitiveHomeDeps :: UnitId -> UnitEnv -> [UnitId]
- hugCompleteSigs :: UnitEnv -> IO CompleteMatches
- hugAllInstances :: UnitEnv -> IO (InstEnv, [FamInst])
- hugAllAnns :: UnitEnv -> IO AnnEnv
- ue_units :: HasDebugCallStack => UnitEnv -> UnitState
Documentation
Constructors
| UnitEnv | |
Fields
| |
initUnitEnv :: UnitId -> HomeUnitGraph -> GhcNameVersion -> Platform -> IO UnitEnv Source #
updateHug :: (HomeUnitGraph -> HomeUnitGraph) -> UnitEnv -> UnitEnv Source #
Unit Env helper functions
ue_hpt :: HasDebugCallStack => UnitEnv -> HomePackageTable Source #
Get the current home unit's package table
ue_currentUnit :: UnitEnv -> UnitId Source #
ue_findHomeUnitEnv :: HasDebugCallStack => UnitId -> UnitEnv -> HomeUnitEnv Source #
ue_updateHomeUnitEnv :: (HomeUnitEnv -> HomeUnitEnv) -> UnitId -> UnitEnv -> UnitEnv Source #
ue_unsafeHomeUnit :: UnitEnv -> HomeUnit Source #
HUG Re-export
type HomeUnitGraph = UnitEnvGraph HomeUnitEnv Source #
data HomeUnitEnv Source #
Constructors
| HomeUnitEnv | |
Fields
| |
Invariants
Preload units info
preloadUnitsInfo :: UnitEnv -> MaybeErr UnitErr [UnitInfo] Source #
Lookup UnitInfo for every preload unit from the UnitState and for every
unit used to instantiate the home unit.
preloadUnitsInfo' :: UnitEnv -> [UnitId] -> MaybeErr UnitErr [UnitInfo] Source #
Lookup UnitInfo for every preload unit from the UnitState, for every unit
used to instantiate the home unit, and for every unit explicitly passed in
the given list of UnitId.
Home Module functions
Operations on the UnitEnv
renameUnitId :: HasDebugCallStack => UnitId -> UnitId -> UnitEnv -> UnitEnv Source #
Rename a unit id in the internal unit env.
, it is assumed that the renameUnitId oldUnit newUnit UnitEnvoldUnit exists in the home units map,
otherwise we panic.
The DynFlags associated with the home unit will have its field homeUnitId set to newUnit.
Modifying the current active home unit
insertHpt :: HasDebugCallStack => HomeModInfo -> UnitEnv -> IO () Source #
Inserts a HomeModInfo at the given ModuleName on the
HomePackageTable of the current unit being compiled.
ue_setFlags :: HasDebugCallStack => DynFlags -> UnitEnv -> UnitEnv Source #
Sets the DynFlags of the current unit being compiled to the given ones
Queries
Queries on the current active home unit
ue_homeUnitState :: HasDebugCallStack => UnitEnv -> UnitState Source #
ue_unit_dbs :: UnitEnv -> Maybe [UnitDatabase UnitId] Source #
ue_unitFlags :: HasDebugCallStack => UnitId -> UnitEnv -> DynFlags Source #
Reachability
Instances, rules, type fams, annotations, etc..
The hug prefix means the function returns only things found in home
units.
hugCompleteSigs :: UnitEnv -> IO CompleteMatches Source #
Get all CompleteMatches (arising from COMPLETE pragmas) present across
all home units.
hugAllInstances :: UnitEnv -> IO (InstEnv, [FamInst]) Source #
Find all the instance declarations (of classes and families) from the Home Package Table filtered by the provided predicate function.
Legacy API
This API is deprecated!