ghc-lib-0.20190204: The GHC API, decoupled from GHC versions

Safe HaskellNone
LanguageHaskell2010

Module

Synopsis

The ModuleName type

data ModuleName Source #

A ModuleName is essentially a simple string, e.g. Data.List.

Instances
Instance details

Defined in Module

Instance details

Defined in Module

Methods

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

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

toConstr :: ModuleName -> Constr #

dataTypeOf :: ModuleName -> DataType #

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

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

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

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

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

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

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

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

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

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

Instance details

Defined in Module

Methods

rnf :: ModuleName -> () #

Instance details

Defined in Module

Instance details

Defined in Module

Instance details

Defined in Module

Instance details

Defined in Module

pprModuleName :: ModuleName -> SDoc Source #

moduleNameFS :: ModuleName -> FastString Source #

moduleNameString :: ModuleName -> String Source #

moduleNameSlashes :: ModuleName -> String Source #

Returns the string version of the module name, with dots replaced by slashes.

moduleNameColons :: ModuleName -> String Source #

Returns the string version of the module name, with dots replaced by colons.

moduleStableString :: Module -> String Source #

Get a string representation of a Module that's unique and stable across recompilations. eg. "$aeson_70dylHtv1FFGeai1IoxcQr$Data.Aeson.Types.Internal"

moduleFreeHoles :: Module -> 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.

moduleIsDefinite :: Module -> Bool Source #

A Module is definite if it has no free holes.

mkModuleName :: String -> ModuleName Source #

mkModuleNameFS :: FastString -> ModuleName Source #

stableModuleNameCmp :: ModuleName -> ModuleName -> Ordering Source #

Compares module names lexically, rather than by their Unique s

The UnitId type

newtype ComponentId Source #

A ComponentId consists of the package name, package version, component ID, the transitive dependencies of the component, and other information to uniquely identify the source code and build configuration of a component.

This used to be known as an InstalledPackageId, but a package can contain multiple components and a ComponentId uniquely identifies a component within a package. When a package only has one component, the ComponentId coincides with the InstalledPackageId

Constructors

Instances
Instance details

Defined in Module

Instance details

Defined in Module

Instance details

Defined in Module

Instance details

Defined in Module

Instance details

Defined in Module

data UnitId 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 UnitId . It can be a DefiniteUnitId , in which case we just have a string that uniquely identifies some fully compiled, installed library we have on disk. However, 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 IndefiniteUnitId , which explicitly records the instantiation, so that we can substitute over it.

Constructors

Instances
Instance details

Defined in Module

Methods

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

(/=) :: UnitId -> UnitId -> Bool #

Instance details

Defined in Module

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 :: (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 #

Instance details

Defined in Module

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 #

Instance details

Defined in Module

Methods

showsPrec :: Int -> UnitId -> ShowS #

show :: UnitId -> String #

showList :: [UnitId] -> ShowS #

Instance details

Defined in Module

Methods

rnf :: UnitId -> () #

Instance details

Defined in Module

Instance details

Defined in Module

Instance details

Defined in Module

unitIdFS :: UnitId -> FastString Source #

unitIdKey :: UnitId -> Unique Source #

data IndefUnitId Source #

A unit identifier which identifies an indefinite library (with holes) that has been *on-the-fly* instantiated with a substitution indefUnitIdInsts . In fact, an indefinite unit identifier could have no holes, but we haven't gotten around to compiling the actual library yet.

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

Constructors

Fields

Instances
Instance details

Defined in Module

Instance details

Defined in Module

Instance details

Defined in Module

data IndefModule Source #

Constructors

Instances
Instance details

Defined in Module

Instance details

Defined in Module

indefUnitIdToUnitId :: DynFlags -> IndefUnitId -> UnitId Source #

Injects an IndefUnitId (indefinite library which was on-the-fly instantiated) to a UnitId (either an indefinite or definite library).

indefModuleToModule :: DynFlags -> IndefModule -> Module Source #

Injects an IndefModule to Module (see also indefUnitIdToUnitId .

newtype InstalledUnitId Source #

An installed unit identifier identifies a library which has been installed to the package database. These strings 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.) Put another way, an installed unit id is either fully instantiated, or not instantiated at all.

Installed unit identifiers look something like p+af23SAj2dZ219, or maybe just p if they don't use Backpack.

Constructors

Fields

Instances
Instance details

Defined in Module

Instance details

Defined in Module

Instance details

Defined in Module

toInstalledUnitId :: UnitId -> InstalledUnitId Source #

Lossy conversion to the on-disk InstalledUnitId for a component.

type ShHoleSubst = ModuleNameEnv Module Source #

Substitution on module variables, mapping module names to module identifiers.

unitIdIsDefinite :: UnitId -> Bool Source #

A UnitId is definite if it has no free holes.

unitIdString :: UnitId -> String Source #

unitIdFreeHoles :: UnitId -> UniqDSet ModuleName Source #

Retrieve the set of free holes of a UnitId .

newUnitId :: ComponentId -> [(ModuleName, Module)] -> UnitId Source #

Create a new, un-hashed unit identifier.

newIndefUnitId :: ComponentId -> [(ModuleName, Module)] -> IndefUnitId Source #

Create a new IndefUnitId given an explicit module substitution.

newSimpleUnitId :: ComponentId -> UnitId Source #

Create a new simple unit identifier (no holes) from a ComponentId .

hashUnitId :: ComponentId -> [(ModuleName, Module)] -> FastString Source #

Generate a uniquely identifying FastString for a unit identifier. This is a one-way function. You can rely on one special property: if a unit identifier is in most general form, its FastString coincides with its ComponentId . This hash is completely internal to GHC and is not used for symbol names or file paths.

fsToUnitId :: FastString -> UnitId Source #

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

stringToUnitId :: String -> UnitId Source #

stableUnitIdCmp :: UnitId -> UnitId -> Ordering Source #

Compares package ids lexically, rather than by their Unique s

HOLE renaming

renameHoleUnitId :: DynFlags -> ShHoleSubst -> UnitId -> UnitId Source #

Substitutes holes in a UnitId , suitable for renaming when an include occurs; see Note [Representation of module/name variable].

p[A=A] maps to p[A=B] with A=B .

renameHoleModule :: DynFlags -> ShHoleSubst -> Module -> Module Source #

Substitutes holes in a Module . NOT suitable for being called directly on a nameModule, see Note [Representation of module/name variable]. p[A=A]:B maps to p[A=q():A]:B with A=q():A; similarly, A maps to q():A.

renameHoleUnitId' :: PackageConfigMap -> ShHoleSubst -> UnitId -> UnitId Source #

Like 'renameHoleUnitId, but requires only PackageConfigMap so it can be used by Packages.

renameHoleModule' :: PackageConfigMap -> ShHoleSubst -> Module -> Module Source #

Like renameHoleModule , but requires only PackageConfigMap so it can be used by Packages.

Generalization

splitModuleInsts :: Module -> (InstalledModule, Maybe IndefModule) Source #

Given a possibly on-the-fly instantiated module, split it into a Module that we definitely can find on-disk, as well as an instantiation if we need to instantiate it on the fly. If the instantiation is Nothing no on-the-fly renaming is needed.

splitUnitIdInsts :: UnitId -> (InstalledUnitId, Maybe IndefUnitId) Source #

See splitModuleInsts .

generalizeIndefUnitId :: IndefUnitId -> IndefUnitId Source #

generalizeIndefModule :: IndefModule -> IndefModule Source #

Parsers

parseModuleName :: ReadP ModuleName Source #

parseUnitId :: ReadP UnitId Source #

parseComponentId :: ReadP ComponentId Source #

parseModuleId :: ReadP Module Source #

parseModSubst :: ReadP [(ModuleName, Module)] Source #

Wired-in UnitIds

primUnitId :: UnitId Source #

integerUnitId :: 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 #

isHoleModule :: Module -> Bool Source #

interactiveUnitId :: UnitId Source #

isInteractiveModule :: Module -> Bool Source #

wiredInUnitIds :: [UnitId] Source #

The Module type

data Module Source #

A Module is a pair of a UnitId and a ModuleName .

Module variables (i.e. H ) which can be instantiated to a specific module at some later point in time are represented with moduleUnitId set to holeUnitId (this allows us to avoid having to make moduleUnitId a partial operation.)

Constructors

Instances
Instance details

Defined in Module

Methods

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

(/=) :: Module -> Module -> Bool #

Instance details

Defined in Module

Methods

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

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

toConstr :: Module -> Constr #

dataTypeOf :: Module -> DataType #

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

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

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

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

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

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

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

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

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

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

Instance details

Defined in Module

Methods

compare :: Module -> Module -> Ordering #

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

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

(>) :: Module -> Module -> Bool #

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

max :: Module -> Module -> Module #

min :: Module -> Module -> Module #

Instance details

Defined in Module

Methods

rnf :: Module -> () #

Instance details

Defined in Module

Instance details

Defined in Module

Instance details

Defined in Module

moduleUnitId :: Module -> UnitId Source #

moduleName :: Module -> ModuleName Source #

pprModule :: Module -> SDoc Source #

mkModule :: UnitId -> ModuleName -> Module Source #

mkHoleModule :: ModuleName -> Module Source #

Create a module variable at some ModuleName . See Note [Representation of module/name variables]

stableModuleCmp :: Module -> Module -> Ordering Source #

This gives a stable ordering, as opposed to the Ord instance which gives an ordering based on the Unique s of the components, which may not be stable from run to run of the compiler.

class HasModule m where Source #

Methods

getModule :: m Module Source #

Instances
Instance details

Defined in CoreMonad

Instance details

Defined in TcSMonad

Instance details

Defined in IOEnv

Methods

getModule :: IOEnv env Module Source #

class ContainsModule t where Source #

Methods

extractModule :: t -> Module Source #

Instances
Instance details

Defined in TcRnTypes

Instance details

Defined in TcRnTypes

Instance details

Defined in TcRnTypes

Methods

extractModule :: Env gbl lcl -> Module Source #

Installed unit ids and modules

data InstalledModule Source #

A InstalledModule is a Module which contains a InstalledUnitId .

Constructors

Instances
Instance details

Defined in Module

Instance details

Defined in Module

data InstalledModuleEnv elt Source #

A map keyed off of InstalledModule

installedModuleEq :: InstalledModule -> Module -> Bool Source #

Test if a Module corresponds to a given InstalledModule , modulo instantiation.

installedUnitIdEq :: InstalledUnitId -> UnitId -> Bool Source #

Test if a UnitId corresponds to a given InstalledUnitId , modulo instantiation.

installedUnitIdString :: InstalledUnitId -> String Source #

fsToInstalledUnitId :: FastString -> InstalledUnitId Source #

componentIdToInstalledUnitId :: ComponentId -> InstalledUnitId Source #

stringToInstalledUnitId :: String -> InstalledUnitId Source #

emptyInstalledModuleEnv :: InstalledModuleEnv a Source #

lookupInstalledModuleEnv :: InstalledModuleEnv a -> InstalledModule -> Maybe a Source #

extendInstalledModuleEnv :: InstalledModuleEnv a -> InstalledModule -> a -> InstalledModuleEnv a Source #

filterInstalledModuleEnv :: (InstalledModule -> a -> Bool) -> InstalledModuleEnv a -> InstalledModuleEnv a Source #

delInstalledModuleEnv :: InstalledModuleEnv a -> InstalledModule -> InstalledModuleEnv a Source #

newtype DefUnitId Source #

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

Constructors

Instances
Instance details

Defined in Module

Instance details

Defined in Module

Instance details

Defined in Module

The ModuleLocation type

data ModLocation Source #

Module Location

Where a module lives on the file system: the actual locations of the .hs, .hi and .o files, if we have them

Constructors

Instances
Instance details

Defined in Module

Instance details

Defined in Module

addBootSuffix :: FilePath -> FilePath Source #

Add the -boot suffix to .hs, .hi and .o files

addBootSuffix_maybe :: Bool -> FilePath -> FilePath Source #

Add the -boot suffix if the Bool argument is True

addBootSuffixLocn :: ModLocation -> ModLocation Source #

Add the -boot suffix to all file paths associated with the module

addBootSuffixLocnOut :: ModLocation -> ModLocation Source #

Add the -boot suffix to all output file paths associated with the module, not including the input file itself

Module mappings

data ModuleEnv elt Source #

A map keyed off of Module s

elemModuleEnv :: Module -> ModuleEnv a -> Bool Source #

extendModuleEnv :: ModuleEnv a -> Module -> a -> ModuleEnv a Source #

extendModuleEnvList :: ModuleEnv a -> [(Module, a)] -> ModuleEnv a Source #

extendModuleEnvList_C :: (a -> a -> a) -> ModuleEnv a -> [(Module, a)] -> ModuleEnv a Source #

plusModuleEnv_C :: (a -> a -> a) -> ModuleEnv a -> ModuleEnv a -> ModuleEnv a Source #

delModuleEnvList :: ModuleEnv a -> [Module] -> ModuleEnv a Source #

delModuleEnv :: ModuleEnv a -> Module -> ModuleEnv a Source #

plusModuleEnv :: ModuleEnv a -> ModuleEnv a -> ModuleEnv a Source #

lookupModuleEnv :: ModuleEnv a -> Module -> Maybe a Source #

lookupWithDefaultModuleEnv :: ModuleEnv a -> a -> Module -> a Source #

mapModuleEnv :: (a -> b) -> ModuleEnv a -> ModuleEnv b Source #

mkModuleEnv :: [(Module, a)] -> ModuleEnv a Source #

emptyModuleEnv :: ModuleEnv a Source #

moduleEnvKeys :: ModuleEnv a -> [Module] Source #

moduleEnvElts :: ModuleEnv a -> [a] Source #

moduleEnvToList :: ModuleEnv a -> [(Module, a)] Source #

unitModuleEnv :: Module -> a -> ModuleEnv a Source #

isEmptyModuleEnv :: ModuleEnv a -> Bool Source #

extendModuleEnvWith :: (a -> a -> a) -> ModuleEnv a -> Module -> a -> ModuleEnv a Source #

filterModuleEnv :: (Module -> a -> Bool) -> ModuleEnv a -> ModuleEnv a Source #

ModuleName mappings

type ModuleNameEnv elt = UniqFM elt Source #

A map keyed off of ModuleName s (actually, their Unique s)

type DModuleNameEnv elt = UniqDFM elt Source #

A map keyed off of ModuleName s (actually, their Unique s) Has deterministic folds and can be deterministically converted to a list

Sets of Modules

type ModuleSet = Set NDModule Source #

A set of Module s

emptyModuleSet :: ModuleSet Source #

mkModuleSet :: [Module] -> ModuleSet Source #

moduleSetElts :: ModuleSet -> [Module] Source #

extendModuleSet :: ModuleSet -> Module -> ModuleSet Source #

extendModuleSetList :: ModuleSet -> [Module] -> ModuleSet Source #

delModuleSet :: ModuleSet -> Module -> ModuleSet Source #

elemModuleSet :: Module -> ModuleSet -> Bool Source #

intersectModuleSet :: ModuleSet -> ModuleSet -> ModuleSet Source #

minusModuleSet :: ModuleSet -> ModuleSet -> ModuleSet Source #

unionModuleSet :: ModuleSet -> ModuleSet -> ModuleSet Source #

unitModuleSet :: Module -> ModuleSet Source #

AltStyle によって変換されたページ (->オリジナル) /