|
|
|
|
|
Description |
GHC uses several kinds of name internally:
Global Ids and Vars are those that are imported or correspond to a data constructor, primitive operation, or record selectors.
Local Ids and Vars are those bound within an expression (e.g. by a lambda) or at the top level of the module being compiled.
|
|
Synopsis |
|
|
|
|
The main data type
|
|
data Var |
Essentially a typed Name, that may also contain some additional information
about the Var and it's use sites.
| Instances | |
|
|
Constructing Vars
|
|
mkLocalIdVar :: Name -> Type -> IdInfo -> Var |
For an explanation of global vs. local Vars, see Var#globalvslocal
|
|
mkExportedLocalIdVar :: Name -> Type -> IdInfo -> Var |
Exported Vars will not be removed as dead code
|
|
mkGlobalIdVar :: GlobalIdDetails -> Name -> Type -> IdInfo -> Var |
For an explanation of global vs. local Vars, see Var#globalvslocal
|
|
Taking Vars apart
|
|
varName :: Var -> Name |
|
varUnique :: Var -> Unique |
|
varType :: Var -> Kind |
|
varIdInfo :: Var -> IdInfo |
Extract Id information from the Var if it represents a global or local Id, otherwise panic
|
|
globalIdVarDetails :: Var -> GlobalIdDetails |
Find the global Id information if the Var is a global Id, otherwise returns notGlobalId
|
|
Modifying Vars
|
|
setVarName :: Var -> Name -> Var |
|
setVarUnique :: Var -> Unique -> Var |
|
setVarType :: Id -> Type -> Id |
|
setIdVarExported :: Var -> Var |
Exports the given local Id. Can also be called on global Ids, such as data constructors
and class operations, which are born as global Ids and automatically exported
|
|
setIdVarNotExported :: Id -> Id |
We can only do this to LocalIds
|
|
globaliseIdVar :: GlobalIdDetails -> Var -> Var |
If it's a local, make it global
|
|
lazySetVarIdInfo :: Var -> IdInfo -> Var |
|
Predicates
|
|
isCoVar :: Var -> Bool |
|
isIdVar :: Var -> Bool |
|
isTyVar :: Var -> Bool |
|
isTcTyVar :: Var -> Bool |
|
isLocalVar :: Var -> Bool |
isLocalVar returns True for type variables as well as local Ids
These are the variables that we need to pay attention to when finding free
variables, or doing dependency analysis.
|
|
isLocalIdVar :: Var -> Bool |
|
isGlobalIdVar :: Var -> Bool |
|
isExportedIdVar :: Var -> Bool |
isExportedIdVar means "don't throw this away"
|
|
mustHaveLocalBinding :: Var -> Bool |
mustHaveLocalBinding returns True of Ids and TyVars
that must have a binding in this module. The converse
is not quite right: there are some global Ids that must have
bindings, such as record selectors. But that doesn't matter,
because it's only used for assertions
|
|
Type variable data type
|
|
type TyVar = Var |
|
Constructing TyVars
|
|
mkTyVar :: Name -> Kind -> TyVar |
|
mkTcTyVar :: Name -> Kind -> TcTyVarDetails -> TyVar |
|
mkWildCoVar :: Kind -> TyVar |
Create a type variable that is never referred to, so its unique doesn't
matter
|
|
Taking TyVars apart
|
|
tyVarName :: TyVar -> Name |
|
tyVarKind :: TyVar -> Kind |
|
tcTyVarDetails :: Var -> TcTyVarDetails |
|
Modifying TyVars
|
|
setTyVarName :: TyVar -> Name -> TyVar |
|
setTyVarUnique :: TyVar -> Unique -> TyVar |
|
setTyVarKind :: TyVar -> Kind -> TyVar |
|
Coercion variable data type
|
|
type CoVar = TyVar |
|
Constructing CoVars
|
|
mkCoVar :: Name -> Kind -> CoVar |
|
Taking CoVars apart
|
|
coVarName :: CoVar -> Name |
|
Modifying CoVars
|
|
setCoVarUnique :: CoVar -> Unique -> CoVar |
|
setCoVarName :: CoVar -> Name -> CoVar |
|
Var type synonyms
|
|
type Id = Var |
|
type DictId = Var |
|
Produced by Haddock version 2.3.0 |