Safe Haskell | None |
---|---|
Language | Haskell2010 |
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 :: HasDebugCallStack => Id -> Subst -> Id
- noWarnLookupIdSubst :: HasDebugCallStack => Id -> Subst -> Id
- extendInScope :: Id -> Subst -> Subst
- extendSubst :: Id -> Id -> Subst -> Subst
Documentation
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 :: HasDebugCallStack => Id -> Subst -> Id Source #
Substitutes an occurrence of an identifier for its counterpart recorded
in the Subst
.
noWarnLookupIdSubst :: HasDebugCallStack => 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.