Var
Contents
Description
GHC uses several kinds of name internally:
-
OccName.OccName: see OccName -
RdrName.RdrName: see RdrName -
Name: see Name -
Id.Id: see Id -
Varis a synonym for theId.Idtype but it may additionally potentially contain type variables, which have aKindrather than aTypeand only contain some extra details during typechecking. TheseVarnames may either be global or local, see Var
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.
- data Var
- type TyVar = Var
- type CoVar = TyVar
- type Id = Var
- type DictId = EvId
- type DFunId = Id
- type EvVar = Var
- type EvId = Id
- type IpId = EvId
- varName :: Var -> Name
- varUnique :: Var -> Unique
- varType :: Var -> Kind
- setVarName :: Var -> Name -> Var
- setVarUnique :: Var -> Unique -> Var
- setVarType :: Id -> Type -> Id
- mkGlobalVar :: IdDetails -> Name -> Type -> IdInfo -> Id
- mkLocalVar :: IdDetails -> Name -> Type -> IdInfo -> Id
- mkExportedLocalVar :: IdDetails -> Name -> Type -> IdInfo -> Id
- idInfo :: Id -> IdInfo
- idDetails :: Id -> IdDetails
- lazySetIdInfo :: Id -> IdInfo -> Var
- setIdDetails :: Id -> IdDetails -> Id
- globaliseId :: Id -> Id
- setIdExported :: Id -> Id
- setIdNotExported :: Id -> Id
- isCoVar :: Var -> Bool
- isId :: Var -> Bool
- isTyCoVar :: Var -> Bool
- isTyVar :: Var -> Bool
- isTcTyVar :: Var -> Bool
- isLocalVar :: Var -> Bool
- isLocalId :: Var -> Bool
- isGlobalId :: Var -> Bool
- isExportedId :: Var -> Bool
- mustHaveLocalBinding :: Var -> Bool
- mkTyVar :: Name -> Kind -> TyVar
- mkTcTyVar :: Name -> Kind -> TcTyVarDetails -> TyVar
- mkWildCoVar :: Kind -> TyVar
- tyVarName :: TyVar -> Name
- tyVarKind :: TyVar -> Kind
- tcTyVarDetails :: TyVar -> TcTyVarDetails
- setTcTyVarDetails :: TyVar -> TcTyVarDetails -> TyVar
- setTyVarName :: TyVar -> Name -> TyVar
- setTyVarUnique :: TyVar -> Unique -> TyVar
- setTyVarKind :: TyVar -> Kind -> TyVar
- mkCoVar :: Name -> Kind -> CoVar
- coVarName :: CoVar -> Name
- setCoVarUnique :: CoVar -> Unique -> CoVar
- setCoVarName :: CoVar -> Name -> CoVar
The main data type and synonyms
data Var
Taking Vars apart
Modifying Vars
setVarName :: Var -> Name -> Var
setVarUnique :: Var -> Unique -> Var
setVarType :: Id -> Type -> Id
Constructing, taking apart, modifying Ids
mkExportedLocalVar :: IdDetails -> Name -> Type -> IdInfo -> Id
Exported Vars will not be removed as dead code
lazySetIdInfo :: Id -> IdInfo -> Var
setIdDetails :: Id -> IdDetails -> Id
globaliseId :: Id -> Id
If it's a local, make it global
setIdExported :: Id -> Id
setIdNotExported :: Id -> Id
We can only do this to LocalIds
Predicates
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.
isGlobalId :: Var -> Bool
isExportedId :: 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
Constructing TyVars
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
setTcTyVarDetails :: TyVar -> TcTyVarDetails -> TyVar
Modifying TyVars
setTyVarName :: TyVar -> Name -> TyVar
setTyVarUnique :: TyVar -> Unique -> TyVar
setTyVarKind :: TyVar -> Kind -> TyVar
Constructing CoVars
Taking CoVars apart
Modifying CoVars
setCoVarUnique :: CoVar -> Unique -> CoVar
setCoVarName :: CoVar -> Name -> CoVar