Remark: we cannot use the caching trick used at FindExpr
and ReplaceExpr
because they
may visit the same expression multiple times if they are stored in different memory
addresses. Note that the following code is parametric in a monad m
.
@[inline]
def
Lean.Expr.forEach'
{ω : Type}
{m : Type → Type}
[STWorld ω m]
[MonadLiftT (ST ω) m]
[Monad m]
(e : Lean.Expr)
(f : Lean.Expr → m Bool)
:
m Unit
Apply f
to each sub-expression of e
. If f t
returns false, then t's children are not visited.
Equations
- e.forEach' f = (Lean.ForEachExpr.visit f e).run