ghc-7.8.20140130: The GHC API

Safe HaskellNone
LanguageHaskell98

Module

Contents

Synopsis

The ModuleName type

data ModuleNameSource

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

moduleNameSlashes :: ModuleName -> StringSource

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

moduleNameColons :: ModuleName -> StringSource

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

stableModuleNameCmp :: ModuleName -> ModuleName -> OrderingSource

Compares module names lexically, rather than by their Uniques

The PackageId type

data PackageIdSource

Essentially just a string identifying a package, including the version: e.g. parsec-1.0

stablePackageIdCmp :: PackageId -> PackageId -> OrderingSource

Compares package ids lexically, rather than by their Uniques

Wired-in PackageIds

Certain packages are known to the compiler, in that we know about certain entities that reside in these packages, and the compiler needs to declare static Modules and Names that refer to these packages. Hence the wired-in packages can't include version numbers, since we don't want to bake the version numbers of these packages into GHC.

So here's the plan. Wired-in packages are still versioned as normal in the packages database, and you can still have multiple versions of them installed. However, for each invocation of GHC, only a single instance of each wired-in package will be recognised (the desired one is selected via -package/-hide-package), and GHC will use the unversioned PackageId below when referring to it, including in .hi files and object file symbols. Unselected versions of wired-in packages will be ignored, as will any other package that depends directly or indirectly on it (much as if you had used -ignore-package).

mainPackageId :: PackageIdSource

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.

The Module type

stableModuleCmp :: Module -> Module -> OrderingSource

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

class HasModule m whereSource

Instances

The ModuleLocation type

data ModLocationSource

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

addBootSuffix :: FilePath -> FilePathSource

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

addBootSuffix_maybe :: Bool -> FilePath -> FilePathSource

Add the -boot suffix if the Bool argument is True

addBootSuffixLocn :: ModLocation -> ModLocationSource

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

Module mappings

data ModuleEnv eltSource

A map keyed off of Modules

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

plusModuleEnv_C :: (a -> a -> a) -> ModuleEnv a -> ModuleEnv a -> ModuleEnv aSource

mapModuleEnv :: (a -> b) -> ModuleEnv a -> ModuleEnv bSource

foldModuleEnv :: (a -> b -> b) -> b -> ModuleEnv a -> bSource

extendModuleEnvWith :: (a -> a -> a) -> ModuleEnv a -> Module -> a -> ModuleEnv aSource

ModuleName mappings

type ModuleNameEnv elt = UniqFM eltSource

A map keyed off of ModuleNames (actually, their Uniques)

Sets of Modules

type ModuleSet = Map Module ()Source

A set of Modules