Safe Haskell | None |
---|---|
Language | Haskell98 |
GHC uses several kinds of name internally:
OccName
: see "OccName#name_types"RdrName
: see "RdrName#name_types"Name
: see "Name#name_types"Id
represents names that not only have aName
but also aType
and some additional details (aIdInfo
and one ofLocalIdDetails
orGlobalIdDetails
) that are added, modified and inspected by various compiler passes. TheseVar
names may either be global or local, see "Var#globalvslocal"Var
: see "Var#name_types"
- data Var
- type Id = Var
- isId :: Var -> Bool
- mkGlobalId :: IdDetails -> Name -> Type -> IdInfo -> Id
- mkVanillaGlobal :: Name -> Type -> Id
- mkVanillaGlobalWithInfo :: Name -> Type -> IdInfo -> Id
- mkLocalId :: Name -> Type -> Id
- mkLocalIdWithInfo :: Name -> Type -> IdInfo -> Id
- mkExportedLocalId :: Name -> Type -> Id
- mkSysLocal :: FastString -> Unique -> Type -> Id
- mkSysLocalM :: MonadUnique m => FastString -> Type -> m Id
- mkUserLocal :: OccName -> Unique -> Type -> SrcSpan -> Id
- mkUserLocalM :: MonadUnique m => OccName -> Type -> SrcSpan -> m Id
- mkTemplateLocals :: [Type] -> [Id]
- mkTemplateLocalsNum :: Int -> [Type] -> [Id]
- mkTemplateLocal :: Int -> Type -> Id
- mkWorkerId :: Unique -> Id -> Type -> Id
- mkWiredInIdName :: Module -> FastString -> Unique -> Id -> Name
- idName :: Id -> Name
- idType :: Id -> Kind
- idUnique :: Id -> Unique
- idInfo :: Id -> IdInfo
- idDetails :: Id -> IdDetails
- idRepArity :: Id -> RepArity
- recordSelectorFieldLabel :: Id -> (TyCon, FieldLabel)
- setIdName :: Id -> Name -> Id
- setIdUnique :: Id -> Unique -> Id
- setIdType :: Id -> Type -> Id
- setIdExported :: Id -> Id
- setIdNotExported :: Id -> Id
- globaliseId :: Id -> Id
- localiseId :: Id -> Id
- setIdInfo :: Id -> IdInfo -> Id
- lazySetIdInfo :: Id -> IdInfo -> Id
- modifyIdInfo :: (IdInfo -> IdInfo) -> Id -> Id
- maybeModifyIdInfo :: Maybe IdInfo -> Id -> Id
- zapLamIdInfo :: Id -> Id
- zapDemandIdInfo :: Id -> Id
- zapFragileIdInfo :: Id -> Id
- transferPolyIdInfo :: Id -> [Var] -> Id -> Id
- zapIdStrictness :: Id -> Id
- isImplicitId :: Id -> Bool
- isDeadBinder :: Id -> Bool
- isStrictId :: Id -> Bool
- isExportedId :: Var -> Bool
- isLocalId :: Var -> Bool
- isGlobalId :: Var -> Bool
- isRecordSelector :: Id -> Bool
- isNaughtyRecordSelector :: Id -> Bool
- isClassOpId_maybe :: Id -> Maybe Class
- isDFunId :: Id -> Bool
- isPrimOpId :: Id -> Bool
- isPrimOpId_maybe :: Id -> Maybe PrimOp
- isFCallId :: Id -> Bool
- isFCallId_maybe :: Id -> Maybe ForeignCall
- isDataConWorkId :: Id -> Bool
- isDataConWorkId_maybe :: Id -> Maybe DataCon
- isDataConId_maybe :: Id -> Maybe DataCon
- idDataCon :: Id -> DataCon
- isConLikeId :: Id -> Bool
- isBottomingId :: Id -> Bool
- idIsFrom :: Module -> Id -> Bool
- hasNoBinding :: Id -> Bool
- type DictId = EvId
- isDictId :: Id -> Bool
- dfunNSilent :: Id -> Int
- isEvVar :: Var -> Bool
- idInlinePragma :: Id -> InlinePragma
- setInlinePragma :: Id -> InlinePragma -> Id
- modifyInlinePragma :: Id -> (InlinePragma -> InlinePragma) -> Id
- idInlineActivation :: Id -> Activation
- setInlineActivation :: Id -> Activation -> Id
- idRuleMatchInfo :: Id -> RuleMatchInfo
- isOneShotBndr :: Var -> Bool
- isOneShotLambda :: Id -> Bool
- isProbablyOneShotLambda :: Id -> Bool
- setOneShotLambda :: Id -> Id
- clearOneShotLambda :: Id -> Id
- updOneShotInfo :: Id -> OneShotInfo -> Id
- setIdOneShotInfo :: Id -> OneShotInfo -> Id
- isStateHackType :: Type -> Bool
- stateHackOneShot :: OneShotInfo
- typeOneShot :: Type -> OneShotInfo
- idArity :: Id -> Arity
- idUnfolding :: Id -> Unfolding
- realIdUnfolding :: Id -> Unfolding
- idSpecialisation :: Id -> SpecInfo
- idCoreRules :: Id -> [CoreRule]
- idHasRules :: Id -> Bool
- idCafInfo :: Id -> CafInfo
- idOneShotInfo :: Id -> OneShotInfo
- idOccInfo :: Id -> OccInfo
- setIdUnfoldingLazily :: Id -> Unfolding -> Id
- setIdUnfolding :: Id -> Unfolding -> Id
- setIdArity :: Id -> Arity -> Id
- setIdSpecialisation :: Id -> SpecInfo -> Id
- setIdCafInfo :: Id -> CafInfo -> Id
- setIdOccInfo :: Id -> OccInfo -> Id
- zapIdOccInfo :: Id -> Id
- setIdDemandInfo :: Id -> Demand -> Id
- setIdStrictness :: Id -> StrictSig -> Id
- idDemandInfo :: Id -> Demand
- idStrictness :: Id -> StrictSig
The main types
Simple construction
mkGlobalId :: IdDetails -> Name -> Type -> IdInfo -> IdSource
For an explanation of global vs. local Id
s, see "Var#globalvslocal"
mkLocalId :: Name -> Type -> IdSource
For an explanation of global vs. local Id
s, see "Var#globalvslocal"
mkExportedLocalId :: Name -> Type -> IdSource
Create a local Id
that is marked as exported.
This prevents things attached to it from being removed as dead code.
mkSysLocal :: FastString -> Unique -> Type -> IdSource
mkSysLocalM :: MonadUnique m => FastString -> Type -> m IdSource
mkUserLocalM :: MonadUnique m => OccName -> Type -> SrcSpan -> m IdSource
mkTemplateLocals :: [Type] -> [Id]Source
Create a template local for a series of types
mkTemplateLocalsNum :: Int -> [Type] -> [Id]Source
Create a template local for a series of type, but start from a specified template local
mkTemplateLocal :: Int -> Type -> IdSource
Create a template local: a family of system local Id
s in bijection with Int
s, typically used in unfoldings
mkWorkerId :: Unique -> Id -> Type -> IdSource
Workers get local names. CoreTidy will externalise these if necessary
mkWiredInIdName :: Module -> FastString -> Unique -> Id -> NameSource
Taking an Id apart
idRepArity :: Id -> RepAritySource
recordSelectorFieldLabel :: Id -> (TyCon, FieldLabel)Source
Modifying an Id
setIdUnique :: Id -> Unique -> IdSource
setIdExported :: Id -> IdSource
setIdNotExported :: Id -> IdSource
globaliseId :: Id -> IdSource
If it's a local, make it global
localiseId :: Id -> IdSource
lazySetIdInfo :: Id -> IdInfo -> IdSource
zapLamIdInfo :: Id -> IdSource
zapDemandIdInfo :: Id -> IdSource
zapFragileIdInfo :: Id -> IdSource
zapIdStrictness :: Id -> IdSource
Predicates on Ids
isImplicitId :: Id -> BoolSource
isImplicitId
tells whether an Id
s info is implied by other
declarations, so we don't need to put its signature in an interface
file, even if it's mentioned in some other interface unfolding.
isDeadBinder :: Id -> BoolSource
isStrictId :: Id -> BoolSource
This predicate says whether the Id
has a strict demand placed on it or
has a type such that it can always be evaluated strictly (i.e an
unlifted type, as of GHC 7.6). We need to
check separately whether the Id
has a so-called "strict type" because if
the demand for the given id
hasn't been computed yet but id
has a strict
type, we still want isStrictId id
to be True
.
isExportedId :: Var -> BoolSource
isExportedIdVar
means "don't throw this away"
isGlobalId :: Var -> BoolSource
isRecordSelector :: Id -> BoolSource
isClassOpId_maybe :: Id -> Maybe ClassSource
isPrimOpId :: Id -> BoolSource
isPrimOpId_maybe :: Id -> Maybe PrimOpSource
isDataConWorkId :: Id -> BoolSource
idDataCon :: Id -> DataConSource
Get from either the worker or the wrapper Id
to the DataCon
. Currently used only in the desugarer.
INVARIANT: idDataCon (dataConWrapId d) = d
: remember, dataConWrapId
can return either the wrapper or the worker
isConLikeId :: Id -> BoolSource
isBottomingId :: Id -> BoolSource
Returns true if an application to n args would diverge
hasNoBinding :: Id -> BoolSource
Returns True
of an Id
which may not have a
binding, even though it is defined in this module.
Evidence variables
dfunNSilent :: Id -> IntSource
Inline pragma stuff
setInlinePragma :: Id -> InlinePragma -> IdSource
modifyInlinePragma :: Id -> (InlinePragma -> InlinePragma) -> IdSource
setInlineActivation :: Id -> Activation -> IdSource
One-shot lambdas
isOneShotBndr :: Var -> BoolSource
Returns whether the lambda associated with the Id
is certainly applied at most once
This one is the "business end", called externally.
It works on type variables as well as Ids, returning True
Its main purpose is to encapsulate the Horrible State Hack
isOneShotLambda :: Id -> BoolSource
Returns whether the lambda associated with the Id
is certainly applied at most once.
You probably want to use isOneShotBndr
instead
setOneShotLambda :: Id -> IdSource
clearOneShotLambda :: Id -> IdSource
updOneShotInfo :: Id -> OneShotInfo -> IdSource
setIdOneShotInfo :: Id -> OneShotInfo -> IdSource
isStateHackType :: Type -> BoolSource
stateHackOneShot :: OneShotInfoSource
Should we apply the state hack to values of this Type
?
typeOneShot :: Type -> OneShotInfoSource
Reading IdInfo
fields
idUnfolding :: Id -> UnfoldingSource
realIdUnfolding :: Id -> UnfoldingSource
idSpecialisation :: Id -> SpecInfoSource
idCoreRules :: Id -> [CoreRule]Source
idHasRules :: Id -> BoolSource
idOneShotInfo :: Id -> OneShotInfoSource
Writing IdInfo
fields
setIdUnfoldingLazily :: Id -> Unfolding -> IdSource
setIdUnfolding :: Id -> Unfolding -> IdSource
setIdArity :: Id -> Arity -> IdSource
setIdSpecialisation :: Id -> SpecInfo -> IdSource
setIdCafInfo :: Id -> CafInfo -> IdSource
setIdOccInfo :: Id -> OccInfo -> IdSource
zapIdOccInfo :: Id -> IdSource
setIdDemandInfo :: Id -> Demand -> IdSource
setIdStrictness :: Id -> StrictSig -> IdSource
idDemandInfo :: Id -> DemandSource
idStrictness :: Id -> StrictSigSource