forEachWhere p f e is similar to forEach f e, but only applies f to subterms that satisfy the
(pure) predicate p.
It also uses the caching trick used at FindExpr and ReplaceExpr. This can be very effective
if the number of subterms satisfying p is a small subset of the set of subterms.
If p holds for most subterms, then it is more efficient to use forEach f e.
Implements caching trick similar to the one used at
FindExprandReplaceExpr.- checked : Lean.HashSet Lean.Expr
Set of visited subterms that satisfy the predicate
p. We have to use this set to make surefis applied at most once of each subterm that satisfiesp.
Instances For
Equations
- Lean.ForEachExprWhere.initCache = { visited := mkArray (USize.toNat Lean.ForEachExprWhere.cacheSize) (cast Lean.ForEachExprWhere.initCache.proof_1 ()), checked := ∅ }
Instances For
@[inline, reducible]
abbrev
Lean.ForEachExprWhere.ForEachM
{ω : Type}
(m : Type → Type)
[STWorld ω m]
[MonadLiftT (ST ω) m]
[Monad m]
(α : Type)
:
Equations
Instances For
unsafe def
Lean.ForEachExprWhere.visited
{ω : Type}
{m : Type → Type}
[STWorld ω m]
[MonadLiftT (ST ω) m]
[Monad m]
(e : Lean.Expr)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
Lean.ForEachExprWhere.checked
{ω : Type}
{m : Type → Type}
[STWorld ω m]
[MonadLiftT (ST ω) m]
[Monad m]
(e : Lean.Expr)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
unsafe def
Lean.ForEachExprWhere.visit
{ω : Type}
{m : Type → Type}
[STWorld ω m]
[MonadLiftT (ST ω) m]
[Monad m]
(p : Lean.Expr → Bool)
(f : Lean.Expr → m Unit)
(e : Lean.Expr)
:
m Unit
Expr.forEachWhere (unsafe) implementation