ghc-9.6.3: The GHC API

Safe Haskell | Safe-Inferred
Language | Haskell2010

GHC.Stg.Subst

Synopsis

- data Subst = Subst InScopeSet IdSubstEnv
- type IdSubstEnv = IdEnv Id
- emptySubst :: Subst
- mkEmptySubst :: InScopeSet -> Subst
- substBndr :: Id -> Subst -> (Id, Subst)
- substBndrs :: Traversable f => f Id -> Subst -> (f Id, Subst)
- lookupIdSubst :: HasCallStack => Id -> Subst -> Id
- noWarnLookupIdSubst :: HasCallStack => Id -> Subst -> Id
- extendInScope :: Id -> Subst -> Subst
- extendSubst :: Id -> Id -> Subst -> Subst

# Documentation

data Subst Source #

A renaming substitution from `Id`s to `Id`s. Like `RnEnv2`, but not maintaining pairs of substitutions. Like `Subst`, but with the domain being `Id`s instead of entire `CoreExpr`.

Constructors

Subst InScopeSet IdSubstEnv |

type IdSubstEnv = IdEnv Id Source #

emptySubst :: Subst Source #

    emptySubst = mkEmptySubst emptyInScopeSet

mkEmptySubst :: InScopeSet -> Subst Source #

Constructs a new `Subst` assuming the variables in the given `InScopeSet` are in scope.

substBndr :: Id -> Subst -> (Id, Subst) Source #

Substitutes an `Id` for another one according to the `Subst` given in a way that avoids shadowing the `InScopeSet`, returning the result and an updated `Subst` that should be used by subsequent substitutions.

substBndrs :: Traversable f => f Id -> Subst -> (f Id, Subst) Source #

    substBndrs = runState . traverse (state . substBndr)

lookupIdSubst :: HasCallStack => Id -> Subst -> Id Source #

Substitutes an occurrence of an identifier for its counterpart recorded in the `Subst`.

noWarnLookupIdSubst :: HasCallStack => Id -> Subst -> Id Source #

Substitutes an occurrence of an identifier for its counterpart recorded in the `Subst`. Does not generate a debug warning if the identifier to to substitute wasn't in scope.

extendInScope :: Id -> Subst -> Subst Source #

Add the `Id` to the in-scope set and remove any existing substitutions for it.

extendSubst :: Id -> Id -> Subst -> Subst Source #

Add a substitution for an `Id` to the `Subst`: you must ensure that the in-scope set is such that TyCoSubst Note [The substitution invariant] holds after extending the substitution like this.