ghc-9.10.3: The GHC API

Safe Haskell | None
Language | GHC2021

GHC.Unit.Types

Contents

- Modules
- Units
- Unit Ids
- Utils
- Wired-in units
- Boot modules
- Orphan instances

Description

Unit & Module types

This module is used to resolve the loops between Unit and Module types (Module references a Unit and vice-versa).

Synopsis

- data GenModule unit = Module {
  - moduleUnit :: !unit
  - moduleName :: !ModuleName
  }
- type Module = GenModule Unit
- type InstalledModule = GenModule UnitId
- type HomeUnitModule = GenModule UnitId
- type InstantiatedModule = GenModule InstantiatedUnit
- mkModule :: u -> ModuleName -> GenModule u
- moduleUnitId :: Module -> UnitId
- pprModule :: IsLine doc => Module -> doc
- pprInstantiatedModule :: InstantiatedModule -> SDoc
- moduleFreeHoles :: GenModule (GenUnit u) -> UniqDSet ModuleName
- class IsUnitId u
- data GenUnit uid
  - = RealUnit !(Definite uid)
  - | VirtUnit !(GenInstantiatedUnit uid)
  - | HoleUnit
- type Unit = GenUnit UnitId
- newtype UnitId = UnitId {
  - unitIdFS :: FastString
  }
- newtype UnitKey = UnitKey FastString
- data GenInstantiatedUnit unit = InstantiatedUnit {
  - instUnitFS :: !FastString
  - instUnitKey :: !Unique
  - instUnitInstanceOf :: !unit
  - instUnitInsts :: !(GenInstantiations unit)
  - instUnitHoles :: UniqDSet ModuleName
  }
- type InstantiatedUnit = GenInstantiatedUnit UnitId
- type DefUnitId = Definite UnitId
- type Instantiations = GenInstantiations UnitId
- type GenInstantiations unit = [(ModuleName, GenModule (GenUnit unit))]
- mkInstantiatedUnit :: IsUnitId u => u -> GenInstantiations u -> GenInstantiatedUnit u
- mkInstantiatedUnitHash :: IsUnitId u => u -> [(ModuleName, GenModule (GenUnit u))] -> FastString
- mkVirtUnit :: IsUnitId u => u -> [(ModuleName, GenModule (GenUnit u))] -> GenUnit u
- mapGenUnit :: IsUnitId v => (u -> v) -> GenUnit u -> GenUnit v
- mapInstantiations :: IsUnitId v => (u -> v) -> GenInstantiations u -> GenInstantiations v
- unitFreeModuleHoles :: GenUnit u -> UniqDSet ModuleName
- fsToUnit :: FastString -> Unit
- unitFS :: IsUnitId u => u -> FastString
- unitString :: IsUnitId u => u -> String
- toUnitId :: Unit -> UnitId
- virtualUnitId :: InstantiatedUnit -> UnitId
- stringToUnit :: String -> Unit
- stableUnitCmp :: Unit -> Unit -> Ordering
- unitIsDefinite :: Unit -> Bool
- isHoleUnit :: GenUnit u -> Bool
- pprUnit :: Unit -> SDoc
- unitIdString :: UnitId -> String
- stringToUnitId :: String -> UnitId
- newtype Definite unit = Definite {
  - unDefinite :: unit
  }
- primUnitId :: UnitId
- bignumUnitId :: UnitId
- ghcInternalUnitId :: UnitId
- baseUnitId :: UnitId
- rtsUnitId :: UnitId
- thUnitId :: UnitId
- mainUnitId :: UnitId
- thisGhcUnitId :: UnitId
- interactiveUnitId :: UnitId
- primUnit :: Unit
- bignumUnit :: Unit
- ghcInternalUnit :: Unit
- baseUnit :: Unit
- rtsUnit :: Unit
- thUnit :: Unit
- mainUnit :: Unit
- thisGhcUnit :: Unit
- interactiveUnit :: Unit
- experimentalUnit :: Unit
- isInteractiveModule :: Module -> Bool
- wiredInUnitIds :: [UnitId]
- data IsBootInterface
  - = NotBoot
  - | IsBoot
- data GenWithIsBoot mod = GWIB {
  - gwib_mod :: mod
  - gwib_isBoot :: IsBootInterface
  }
- type ModuleNameWithIsBoot = GenWithIsBoot ModuleName
- type ModuleWithIsBoot = GenWithIsBoot Module

# Modules

data GenModule unit Source #

A generic module is a pair of a unit identifier and a `ModuleName`.

Constructors

Module |

Fields

- moduleUnit :: !unit

  Unit the module belongs to

- moduleName :: !ModuleName

  Module name (e.g. A.B.C)

#### Instances

Instances details

Uniquable Module Source # |
Instance details Defined in GHC.Unit.Types Methods getUnique :: Module -> Unique Source #
Outputable InstalledModule Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: InstalledModule -> SDoc Source #
Outputable InstantiatedModule Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: InstantiatedModule -> SDoc Source #
Outputable Module Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: Module -> SDoc Source #
Functor GenModule Source # |
Instance details Defined in GHC.Unit.Types Methods fmap :: (a -> b) -> GenModule a -> GenModule b # (<$) :: a -> GenModule b -> GenModule a #
NFData (GenModule a) Source # |
Instance details Defined in GHC.Unit.Types Methods rnf :: GenModule a -> () Source #
Binary a => Binary (GenModule a) Source # |
Instance details Defined in GHC.Unit.Types Methods put_ :: BinHandle -> GenModule a -> IO () Source # put :: BinHandle -> GenModule a -> IO (Bin (GenModule a)) Source # get :: BinHandle -> IO (GenModule a) Source #
Data unit => Data (GenModule unit) Source # |

Instance details

Defined in GHC.Unit.Types

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> GenModule unit -> c (GenModule unit) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (GenModule unit) #

toConstr :: GenModule unit -> Constr #

dataTypeOf :: GenModule unit -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (GenModule unit)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (GenModule unit)) #

gmapT :: (forall b. Data b => b -> b) -> GenModule unit -> GenModule unit #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> GenModule unit -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> GenModule unit -> r #

gmapQ :: (forall d. Data d => d -> u) -> GenModule unit -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> GenModule unit -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> GenModule unit -> m (GenModule unit) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> GenModule unit -> m (GenModule unit) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> GenModule unit -> m (GenModule unit) #

Eq unit => Eq (GenModule unit) Source # |
Instance details Defined in GHC.Unit.Types Methods (==) :: GenModule unit -> GenModule unit -> Bool # (/=) :: GenModule unit -> GenModule unit -> Bool #
Ord unit => Ord (GenModule unit) Source # |

Instance details

Defined in GHC.Unit.Types

Methods

compare :: GenModule unit -> GenModule unit -> Ordering #

(<) :: GenModule unit -> GenModule unit -> Bool #

(<=) :: GenModule unit -> GenModule unit -> Bool #

(>) :: GenModule unit -> GenModule unit -> Bool #

(>=) :: GenModule unit -> GenModule unit -> Bool #

max :: GenModule unit -> GenModule unit -> GenModule unit #

min :: GenModule unit -> GenModule unit -> GenModule unit #

type Module = GenModule Unit Source #

A Module is a pair of a `Unit` and a `ModuleName`.

type InstalledModule = GenModule UnitId Source #

A `InstalledModule` is a `Module` whose unit is identified with an `UnitId`.

type HomeUnitModule = GenModule UnitId Source #

A `HomeUnitModule` is like an `InstalledModule` but we expect to find it in one of the home units rather than the package database.

type InstantiatedModule = GenModule InstantiatedUnit Source #

An `InstantiatedModule` is a `Module` whose unit is identified with an `InstantiatedUnit`.

mkModule :: u -> ModuleName -> GenModule u Source #

moduleUnitId :: Module -> UnitId Source #

pprModule :: IsLine doc => Module -> doc Source #

pprInstantiatedModule :: InstantiatedModule -> SDoc Source #

moduleFreeHoles :: GenModule (GenUnit u) -> UniqDSet ModuleName Source #

Calculate the free holes of a `Module`. If this set is non-empty, this module was defined in an indefinite library that had required signatures.

If a module has free holes, that means that substitutions can operate on it; if it has no free holes, substituting over a module has no effect.

# Units

class IsUnitId u Source #

Class for types that are used as unit identifiers (UnitKey, UnitId, Unit)

We need this class because we create new unit ids for virtual units (see VirtUnit) and they have to to be made from units with different kinds of identifiers.

Minimal complete definition

unitFS

#### Instances

Instances details

IsUnitId UnitId Source # |
Instance details Defined in GHC.Unit.Types Methods unitFS :: UnitId -> FastString Source #
IsUnitId UnitKey Source # |
Instance details Defined in GHC.Unit.Types Methods unitFS :: UnitKey -> FastString Source #
IsUnitId unit => IsUnitId (Definite unit) Source # |
Instance details Defined in GHC.Unit.Types Methods unitFS :: Definite unit -> FastString Source #
IsUnitId u => IsUnitId (GenUnit u) Source # |
Instance details Defined in GHC.Unit.Types Methods unitFS :: GenUnit u -> FastString Source #

data GenUnit uid Source #

A unit identifier identifies a (possibly partially) instantiated library. It is primarily used as part of `Module`, which in turn is used in `Name`, which is used to give names to entities when typechecking.

There are two possible forms for a `Unit`:

1) It can be a `RealUnit`, in which case we just have a `DefUnitId` that uniquely identifies some fully compiled, installed library we have on disk.

2) It can be an `VirtUnit`. When we are typechecking a library with missing holes, we may need to instantiate a library on the fly (in which case we don't have any on-disk representation.) In that case, you have an `InstantiatedUnit`, which explicitly records the instantiation, so that we can substitute over it.

Constructors

RealUnit !(Definite uid) | Installed definite unit (either a fully instantiated unit or a closed unit)
VirtUnit !(GenInstantiatedUnit uid) | Virtual unit instantiated on-the-fly. It may be definite if all the holes are instantiated but we don't have code objects for it.
HoleUnit | Fake hole unit

#### Instances

Instances details

NFData Unit Source # |
Instance details Defined in GHC.Unit.Types Methods rnf :: Unit -> () Source #
Uniquable Module Source # |
Instance details Defined in GHC.Unit.Types Methods getUnique :: Module -> Unique Source #
Binary Unit Source # |
Instance details Defined in GHC.Unit.Types Methods put_ :: BinHandle -> Unit -> IO () Source # put :: BinHandle -> Unit -> IO (Bin Unit) Source # get :: BinHandle -> IO Unit Source #
Outputable Module Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: Module -> SDoc Source #
Outputable Unit Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: Unit -> SDoc Source #
Data Unit Source # |

Instance details

Defined in GHC.Unit.Types

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Unit -> c Unit #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Unit #

toConstr :: Unit -> Constr #

dataTypeOf :: Unit -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Unit) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Unit) #

gmapT :: (forall b. Data b => b -> b) -> Unit -> Unit #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Unit -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Unit -> r #

gmapQ :: (forall d. Data d => d -> u) -> Unit -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Unit -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Unit -> m Unit #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Unit -> m Unit #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Unit -> m Unit #

Show Unit Source # |
Instance details Defined in GHC.Unit.Types Methods showsPrec :: Int -> Unit -> ShowS # show :: Unit -> String # showList :: [Unit] -> ShowS #
Ord Unit Source # |
Instance details Defined in GHC.Unit.Types Methods compare :: Unit -> Unit -> Ordering # (<) :: Unit -> Unit -> Bool # (<=) :: Unit -> Unit -> Bool # (>) :: Unit -> Unit -> Bool # (>=) :: Unit -> Unit -> Bool # max :: Unit -> Unit -> Unit # min :: Unit -> Unit -> Unit #
IsUnitId u => Uniquable (GenUnit u) Source # |
Instance details Defined in GHC.Unit.Types Methods getUnique :: GenUnit u -> Unique Source #
IsUnitId u => IsUnitId (GenUnit u) Source # |
Instance details Defined in GHC.Unit.Types Methods unitFS :: GenUnit u -> FastString Source #
IsUnitId u => Eq (GenUnit u) Source # |
Instance details Defined in GHC.Unit.Types Methods (==) :: GenUnit u -> GenUnit u -> Bool # (/=) :: GenUnit u -> GenUnit u -> Bool #

type Unit = GenUnit UnitId Source #

newtype UnitId Source #

A UnitId identifies a built library in a database and is used to generate unique symbols, etc. It's usually of the form:

pkgname-1.2:libname+hash

These UnitId are provided to us via the `-this-unit-id` flag.

The library in question may be definite or indefinite; if it is indefinite, none of the holes have been filled (we never install partially instantiated libraries as we can cheaply instantiate them on-the-fly, cf VirtUnit). Put another way, an installed unit id is either fully instantiated, or not instantiated at all.

Constructors

UnitId |

Fields

- unitIdFS :: FastString

  The full hashed unit identifier, including the component id and the hash.

#### Instances

Instances details

NFData Unit Source # |
Instance details Defined in GHC.Unit.Types Methods rnf :: Unit -> () Source #
Uniquable Module Source # |
Instance details Defined in GHC.Unit.Types Methods getUnique :: Module -> Unique Source #
Uniquable UnitId Source # |
Instance details Defined in GHC.Unit.Types Methods getUnique :: UnitId -> Unique Source #
IsUnitId UnitId Source # |
Instance details Defined in GHC.Unit.Types Methods unitFS :: UnitId -> FastString Source #
Binary InstantiatedUnit Source # |
Instance details Defined in GHC.Unit.Types Methods put_ :: BinHandle -> InstantiatedUnit -> IO () Source # put :: BinHandle -> InstantiatedUnit -> IO (Bin InstantiatedUnit) Source # get :: BinHandle -> IO InstantiatedUnit Source #
Binary Unit Source # |
Instance details Defined in GHC.Unit.Types Methods put_ :: BinHandle -> Unit -> IO () Source # put :: BinHandle -> Unit -> IO (Bin Unit) Source # get :: BinHandle -> IO Unit Source #
Binary UnitId Source # |
Instance details Defined in GHC.Unit.Types Methods put_ :: BinHandle -> UnitId -> IO () Source # put :: BinHandle -> UnitId -> IO (Bin UnitId) Source # get :: BinHandle -> IO UnitId Source #
Outputable InstalledModule Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: InstalledModule -> SDoc Source #
Outputable InstantiatedModule Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: InstantiatedModule -> SDoc Source #
Outputable InstantiatedUnit Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: InstantiatedUnit -> SDoc Source #
Outputable Module Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: Module -> SDoc Source #
Outputable Unit Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: Unit -> SDoc Source #
Outputable UnitId Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: UnitId -> SDoc Source #
Data Unit Source # |

Instance details

Defined in GHC.Unit.Types

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Unit -> c Unit #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Unit #

toConstr :: Unit -> Constr #

dataTypeOf :: Unit -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Unit) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Unit) #

gmapT :: (forall b. Data b => b -> b) -> Unit -> Unit #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Unit -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Unit -> r #

gmapQ :: (forall d. Data d => d -> u) -> Unit -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Unit -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Unit -> m Unit #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Unit -> m Unit #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Unit -> m Unit #

Data UnitId Source # |

Instance details

Defined in GHC.Unit.Types

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> UnitId -> c UnitId #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c UnitId #

toConstr :: UnitId -> Constr #

dataTypeOf :: UnitId -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c UnitId) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c UnitId) #

gmapT :: (forall b. Data b => b -> b) -> UnitId -> UnitId #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> UnitId -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> UnitId -> r #

gmapQ :: (forall d. Data d => d -> u) -> UnitId -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> UnitId -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> UnitId -> m UnitId #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> UnitId -> m UnitId #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> UnitId -> m UnitId #

Show Unit Source # |
Instance details Defined in GHC.Unit.Types Methods showsPrec :: Int -> Unit -> ShowS # show :: Unit -> String # showList :: [Unit] -> ShowS #
Eq UnitId Source # |
Instance details Defined in GHC.Unit.Types Methods (==) :: UnitId -> UnitId -> Bool # (/=) :: UnitId -> UnitId -> Bool #
Ord Unit Source # |
Instance details Defined in GHC.Unit.Types Methods compare :: Unit -> Unit -> Ordering # (<) :: Unit -> Unit -> Bool # (<=) :: Unit -> Unit -> Bool # (>) :: Unit -> Unit -> Bool # (>=) :: Unit -> Unit -> Bool # max :: Unit -> Unit -> Unit # min :: Unit -> Unit -> Unit #
Ord UnitId Source # |
Instance details Defined in GHC.Unit.Types Methods compare :: UnitId -> UnitId -> Ordering # (<) :: UnitId -> UnitId -> Bool # (<=) :: UnitId -> UnitId -> Bool # (>) :: UnitId -> UnitId -> Bool # (>=) :: UnitId -> UnitId -> Bool # max :: UnitId -> UnitId -> UnitId # min :: UnitId -> UnitId -> UnitId #

newtype UnitKey Source #

A unit key in the database

Constructors

UnitKey FastString |

#### Instances

Instances details

IsUnitId UnitKey Source # |
Instance details Defined in GHC.Unit.Types Methods unitFS :: UnitKey -> FastString Source #

data GenInstantiatedUnit unit Source #

An instantiated unit.

It identifies an indefinite library (with holes) that has been instantiated.

This unit may be indefinite or not (i.e. with remaining holes or not). If it is definite, we don't know if it has already been compiled and installed in a database. Nevertheless, we have a mechanism called "improvement" to try to match a fully instantiated unit with existing compiled and installed units: see Note [VirtUnit to RealUnit improvement].

An indefinite unit identifier pretty-prints to something like `p[H=H,A=aimpl:A>]` (`p` is the `UnitId`, and the brackets enclose the module substitution).

Constructors

InstantiatedUnit |

Fields

- instUnitFS :: !FastString

  A private, uniquely identifying representation of an InstantiatedUnit. This string is completely private to GHC and is just used to get a unique.

- instUnitKey :: !Unique

  Cached unique of `unitFS`.

- instUnitInstanceOf :: !unit

  The (indefinite) unit being instantiated.

- instUnitInsts :: !(GenInstantiations unit)

  The sorted (by `ModuleName`) instantiations of this unit.

- instUnitHoles :: UniqDSet ModuleName

  A cache of the free module holes of `instUnitInsts`. This lets us efficiently tell if a `InstantiatedUnit` has been fully instantiated (empty set of free module holes) and whether or not a substitution can have any effect.

#### Instances

Instances details

Binary InstantiatedUnit Source # |
Instance details Defined in GHC.Unit.Types Methods put_ :: BinHandle -> InstantiatedUnit -> IO () Source # put :: BinHandle -> InstantiatedUnit -> IO (Bin InstantiatedUnit) Source # get :: BinHandle -> IO InstantiatedUnit Source #
Outputable InstantiatedModule Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: InstantiatedModule -> SDoc Source #
Outputable InstantiatedUnit Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: InstantiatedUnit -> SDoc Source #
Eq (GenInstantiatedUnit unit) Source # |
Instance details Defined in GHC.Unit.Types Methods (==) :: GenInstantiatedUnit unit -> GenInstantiatedUnit unit -> Bool # (/=) :: GenInstantiatedUnit unit -> GenInstantiatedUnit unit -> Bool #
Ord (GenInstantiatedUnit unit) Source # |

Instance details

Defined in GHC.Unit.Types

Methods

compare :: GenInstantiatedUnit unit -> GenInstantiatedUnit unit -> Ordering #

(<) :: GenInstantiatedUnit unit -> GenInstantiatedUnit unit -> Bool #

(<=) :: GenInstantiatedUnit unit -> GenInstantiatedUnit unit -> Bool #

(>) :: GenInstantiatedUnit unit -> GenInstantiatedUnit unit -> Bool #

(>=) :: GenInstantiatedUnit unit -> GenInstantiatedUnit unit -> Bool #

max :: GenInstantiatedUnit unit -> GenInstantiatedUnit unit -> GenInstantiatedUnit unit #

min :: GenInstantiatedUnit unit -> GenInstantiatedUnit unit -> GenInstantiatedUnit unit #

type InstantiatedUnit = GenInstantiatedUnit UnitId Source #

type DefUnitId = Definite UnitId Source #

A `DefUnitId` is an `UnitId` with the invariant that it only refers to a definite library; i.e., one we have generated code for.

type Instantiations = GenInstantiations UnitId Source #

type GenInstantiations unit = [(ModuleName, GenModule (GenUnit unit))] Source #

mkInstantiatedUnit :: IsUnitId u => u -> GenInstantiations u -> GenInstantiatedUnit u Source #

Create a new `GenInstantiatedUnit` given an explicit module substitution.

mkInstantiatedUnitHash :: IsUnitId u => u -> [(ModuleName, GenModule (GenUnit u))] -> FastString Source #

Generate a uniquely identifying hash (internal unit-id) for an instantiated unit.

This is a one-way function. If the indefinite unit has not been instantiated at all, we return its unit-id.

This hash is completely internal to GHC and is not used for symbol names or file paths. It is different from the hash Cabal would produce for the same instantiated unit.

mkVirtUnit :: IsUnitId u => u -> [(ModuleName, GenModule (GenUnit u))] -> GenUnit u Source #

Smart constructor for instantiated GenUnit

mapGenUnit :: IsUnitId v => (u -> v) -> GenUnit u -> GenUnit v Source #

Map over the unit type of a `GenUnit`

mapInstantiations :: IsUnitId v => (u -> v) -> GenInstantiations u -> GenInstantiations v Source #

Map over the unit identifier of unit instantiations.

unitFreeModuleHoles :: GenUnit u -> UniqDSet ModuleName Source #

Retrieve the set of free module holes of a `Unit`.

fsToUnit :: FastString -> Unit Source #

Create a new simple unit identifier from a `FastString`. Internally, this is primarily used to specify wired-in unit identifiers.

unitFS :: IsUnitId u => u -> FastString Source #

unitString :: IsUnitId u => u -> String Source #

toUnitId :: Unit -> UnitId Source #

Return the UnitId of the Unit. For on-the-fly instantiated units, return the UnitId of the indefinite unit this unit is an instance of.

virtualUnitId :: InstantiatedUnit -> UnitId Source #

Return the virtual UnitId of an on-the-fly instantiated unit.

stringToUnit :: String -> Unit Source #

stableUnitCmp :: Unit -> Unit -> Ordering Source #

Compares unit ids lexically, rather than by their `Unique`s

unitIsDefinite :: Unit -> Bool Source #

A `Unit` is definite if it has no free holes.

isHoleUnit :: GenUnit u -> Bool Source #

pprUnit :: Unit -> SDoc Source #

# Unit Ids

unitIdString :: UnitId -> String Source #

stringToUnitId :: String -> UnitId Source #

# Utils

newtype Definite unit Source #

A definite unit (i.e. without any free module hole)

Constructors

Definite |

Fields

- unDefinite :: unit

#### Instances

Instances details

Functor Definite Source # |
Instance details Defined in GHC.Unit.Types Methods fmap :: (a -> b) -> Definite a -> Definite b # (<$) :: a -> Definite b -> Definite a #
Uniquable unit => Uniquable (Definite unit) Source # |
Instance details Defined in GHC.Unit.Types Methods getUnique :: Definite unit -> Unique Source #
IsUnitId unit => IsUnitId (Definite unit) Source # |
Instance details Defined in GHC.Unit.Types Methods unitFS :: Definite unit -> FastString Source #
Binary unit => Binary (Definite unit) Source # |
Instance details Defined in GHC.Unit.Types Methods put_ :: BinHandle -> Definite unit -> IO () Source # put :: BinHandle -> Definite unit -> IO (Bin (Definite unit)) Source # get :: BinHandle -> IO (Definite unit) Source #
Outputable unit => Outputable (Definite unit) Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: Definite unit -> SDoc Source #
Eq unit => Eq (Definite unit) Source # |
Instance details Defined in GHC.Unit.Types Methods (==) :: Definite unit -> Definite unit -> Bool # (/=) :: Definite unit -> Definite unit -> Bool #
Ord unit => Ord (Definite unit) Source # |

Instance details

Defined in GHC.Unit.Types

Methods

compare :: Definite unit -> Definite unit -> Ordering #

(<) :: Definite unit -> Definite unit -> Bool #

(<=) :: Definite unit -> Definite unit -> Bool #

(>) :: Definite unit -> Definite unit -> Bool #

(>=) :: Definite unit -> Definite unit -> Bool #

max :: Definite unit -> Definite unit -> Definite unit #

min :: Definite unit -> Definite unit -> Definite unit #

# Wired-in units

primUnitId :: UnitId Source #

bignumUnitId :: UnitId Source #

ghcInternalUnitId :: UnitId Source #

baseUnitId :: UnitId Source #

rtsUnitId :: UnitId Source #

thUnitId :: UnitId Source #

mainUnitId :: UnitId Source #

This is the package Id for the current program. It is the default package Id if you don't specify a package name. We don't add this prefix to symbol names, since there can be only one main package per program.

thisGhcUnitId :: UnitId Source #

interactiveUnitId :: UnitId Source #

primUnit :: Unit Source #

bignumUnit :: Unit Source #

ghcInternalUnit :: Unit Source #

baseUnit :: Unit Source #

rtsUnit :: Unit Source #

thUnit :: Unit Source #

mainUnit :: Unit Source #

thisGhcUnit :: Unit Source #

interactiveUnit :: Unit Source #

experimentalUnit :: Unit Source #

isInteractiveModule :: Module -> Bool Source #

wiredInUnitIds :: [UnitId] Source #

# Boot modules

data IsBootInterface Source #

Constructors

NotBoot |
IsBoot |

#### Instances

Instances details

Binary IsBootInterface Source # |
Instance details Defined in GHC.Unit.Types Methods put_ :: BinHandle -> IsBootInterface -> IO () Source # put :: BinHandle -> IsBootInterface -> IO (Bin IsBootInterface) Source # get :: BinHandle -> IO IsBootInterface Source #
Data IsBootInterface Source # |

Instance details

Defined in Language.Haskell.Syntax.ImpExp

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> IsBootInterface -> c IsBootInterface #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c IsBootInterface #

toConstr :: IsBootInterface -> Constr #

dataTypeOf :: IsBootInterface -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c IsBootInterface) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c IsBootInterface) #

gmapT :: (forall b. Data b => b -> b) -> IsBootInterface -> IsBootInterface #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> IsBootInterface -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> IsBootInterface -> r #

gmapQ :: (forall d. Data d => d -> u) -> IsBootInterface -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> IsBootInterface -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> IsBootInterface -> m IsBootInterface #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> IsBootInterface -> m IsBootInterface #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> IsBootInterface -> m IsBootInterface #

Show IsBootInterface Source # |
Instance details Defined in Language.Haskell.Syntax.ImpExp Methods showsPrec :: Int -> IsBootInterface -> ShowS # show :: IsBootInterface -> String # showList :: [IsBootInterface] -> ShowS #
Eq IsBootInterface Source # |
Instance details Defined in Language.Haskell.Syntax.ImpExp Methods (==) :: IsBootInterface -> IsBootInterface -> Bool # (/=) :: IsBootInterface -> IsBootInterface -> Bool #
Ord IsBootInterface Source # |

Instance details

Defined in Language.Haskell.Syntax.ImpExp

Methods

compare :: IsBootInterface -> IsBootInterface -> Ordering #

(<) :: IsBootInterface -> IsBootInterface -> Bool #

(<=) :: IsBootInterface -> IsBootInterface -> Bool #

(>) :: IsBootInterface -> IsBootInterface -> Bool #

(>=) :: IsBootInterface -> IsBootInterface -> Bool #

max :: IsBootInterface -> IsBootInterface -> IsBootInterface #

min :: IsBootInterface -> IsBootInterface -> IsBootInterface #

data GenWithIsBoot mod Source #

This data type just pairs a value `mod` with an IsBootInterface flag. In practice, `mod` is usually a `Module` or `ModuleName`'.

Constructors

GWIB |

Fields

- gwib_mod :: mod
- gwib_isBoot :: IsBootInterface

#### Instances

Instances details

Functor GenWithIsBoot Source # |
Instance details Defined in GHC.Unit.Types Methods fmap :: (a -> b) -> GenWithIsBoot a -> GenWithIsBoot b # (<$) :: a -> GenWithIsBoot b -> GenWithIsBoot a #
Foldable GenWithIsBoot Source # |

Instance details

Defined in GHC.Unit.Types

Methods

fold :: Monoid m => GenWithIsBoot m -> m #

foldMap :: Monoid m => (a -> m) -> GenWithIsBoot a -> m #

foldMap' :: Monoid m => (a -> m) -> GenWithIsBoot a -> m #

foldr :: (a -> b -> b) -> b -> GenWithIsBoot a -> b #

foldr' :: (a -> b -> b) -> b -> GenWithIsBoot a -> b #

foldl :: (b -> a -> b) -> b -> GenWithIsBoot a -> b #

foldl' :: (b -> a -> b) -> b -> GenWithIsBoot a -> b #

foldr1 :: (a -> a -> a) -> GenWithIsBoot a -> a #

foldl1 :: (a -> a -> a) -> GenWithIsBoot a -> a #

toList :: GenWithIsBoot a -> [a] #

null :: GenWithIsBoot a -> Bool #

length :: GenWithIsBoot a -> Int #

elem :: Eq a => a -> GenWithIsBoot a -> Bool #

maximum :: Ord a => GenWithIsBoot a -> a #

minimum :: Ord a => GenWithIsBoot a -> a #

sum :: Num a => GenWithIsBoot a -> a #

product :: Num a => GenWithIsBoot a -> a #

Traversable GenWithIsBoot Source # |
Instance details Defined in GHC.Unit.Types Methods traverse :: Applicative f => (a -> f b) -> GenWithIsBoot a -> f (GenWithIsBoot b) # sequenceA :: Applicative f => GenWithIsBoot (f a) -> f (GenWithIsBoot a) # mapM :: Monad m => (a -> m b) -> GenWithIsBoot a -> m (GenWithIsBoot b) # sequence :: Monad m => GenWithIsBoot (m a) -> m (GenWithIsBoot a) #
Binary a => Binary (GenWithIsBoot a) Source # |
Instance details Defined in GHC.Unit.Types Methods put_ :: BinHandle -> GenWithIsBoot a -> IO () Source # put :: BinHandle -> GenWithIsBoot a -> IO (Bin (GenWithIsBoot a)) Source # get :: BinHandle -> IO (GenWithIsBoot a) Source #
Outputable a => Outputable (GenWithIsBoot a) Source # |
Instance details Defined in GHC.Unit.Types Methods ppr :: GenWithIsBoot a -> SDoc Source #
Show mod => Show (GenWithIsBoot mod) Source # |
Instance details Defined in GHC.Unit.Types Methods showsPrec :: Int -> GenWithIsBoot mod -> ShowS # show :: GenWithIsBoot mod -> String # showList :: [GenWithIsBoot mod] -> ShowS #
Eq mod => Eq (GenWithIsBoot mod) Source # |
Instance details Defined in GHC.Unit.Types Methods (==) :: GenWithIsBoot mod -> GenWithIsBoot mod -> Bool # (/=) :: GenWithIsBoot mod -> GenWithIsBoot mod -> Bool #
Ord mod => Ord (GenWithIsBoot mod) Source # |

Instance details

Defined in GHC.Unit.Types

Methods

compare :: GenWithIsBoot mod -> GenWithIsBoot mod -> Ordering #

(<) :: GenWithIsBoot mod -> GenWithIsBoot mod -> Bool #

(<=) :: GenWithIsBoot mod -> GenWithIsBoot mod -> Bool #

(>) :: GenWithIsBoot mod -> GenWithIsBoot mod -> Bool #

(>=) :: GenWithIsBoot mod -> GenWithIsBoot mod -> Bool #

max :: GenWithIsBoot mod -> GenWithIsBoot mod -> GenWithIsBoot mod #

min :: GenWithIsBoot mod -> GenWithIsBoot mod -> GenWithIsBoot mod #

type ModuleNameWithIsBoot = GenWithIsBoot ModuleName Source #

type ModuleWithIsBoot = GenWithIsBoot Module Source #

# Orphan instances

Binary IsBootInterface Source # |
Instance details Methods put_ :: BinHandle -> IsBootInterface -> IO () Source # put :: BinHandle -> IsBootInterface -> IO (Bin IsBootInterface) Source # get :: BinHandle -> IO IsBootInterface Source #