@[reducible, inline]
A general abstraction for the idea of a scope in the compiler.
Instances For
Equations
- Lean.Compiler.LCNF.ScopeM.setScope newScope = set newScope
Instances For
def
Lean.Compiler.LCNF.ScopeM.withBackTrackingScope
{m : Type → Type u_1}
{α : Type}
[MonadLiftT Lean.Compiler.LCNF.ScopeM m]
[Monad m]
[MonadFinally m]
(x : m α)
:
m α
Execute x
but recover the previous scope after doing so.
Equations
- Lean.Compiler.LCNF.ScopeM.withBackTrackingScope x = do let scope ← liftM Lean.Compiler.LCNF.ScopeM.getScope tryFinally x (liftM (Lean.Compiler.LCNF.ScopeM.setScope scope))
Instances For
def
Lean.Compiler.LCNF.ScopeM.withNewScope
{m : Type → Type u_1}
{α : Type}
[MonadLiftT Lean.Compiler.LCNF.ScopeM m]
[Monad m]
[MonadFinally m]
(x : m α)
:
m α
Clear the current scope for the monadic action x
, afterwards continuing
with the old one.
Instances For
Check whether fvarId
is in the current scope, that is, was declared within
the current fun
declaration that is being processed.
Instances For
Add a new FVarId
to the current scope.
Equations
- Lean.Compiler.LCNF.ScopeM.addToScope fvarId = modify fun (scope : Lean.FVarIdSet) => scope.insert fvarId