Similar to traverseLambda
but with an additional pos argument to track position.
Equations
- Lean.Meta.traverseLambdaWithPos f p e = Lean.Meta.traverseLambdaWithPos.visit f #[] p e
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Lean.Meta.traverseLambdaWithPos.visit f fvars p x = do let body ← f p (x.instantiateRev fvars) liftM (Lean.Meta.mkLambdaFVars fvars body)
Instances For
Similar to traverseForall
but with an additional pos argument to track position.
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Lean.Meta.traverseForallWithPos.visit f fvars p x = do let body ← f p (x.instantiateRev fvars) liftM (Lean.Meta.mkForallFVars fvars body)
Instances For
Similar to traverseLet
but with an additional pos argument to track position.
Equations
- Lean.Meta.traverseLetWithPos f p e = Lean.Meta.traverseLetWithPos.visit f #[] p e
Instances For
Instances For
Similar to Lean.Meta.traverseChildren
except that visit
also includes a Pos
argument so you can
track the subexpression position.
Equations
- One or more equations did not get rendered due to their size.
- Lean.Meta.traverseChildrenWithPos visit p (Lean.Expr.lam binderName binderType body binderInfo) = Lean.Meta.traverseLambdaWithPos visit p (Lean.Expr.lam binderName binderType body binderInfo)
- Lean.Meta.traverseChildrenWithPos visit p (Lean.Expr.letE declName type value body nonDep) = Lean.Meta.traverseLetWithPos visit p (Lean.Expr.letE declName type value body nonDep)
- Lean.Meta.traverseChildrenWithPos visit p (fn.app arg) = Lean.Expr.traverseAppWithPos visit p (fn.app arg)
- Lean.Meta.traverseChildrenWithPos visit p (Lean.Expr.mdata data b) = (Lean.Expr.mdata data b).updateMData! <$> visit p b
- Lean.Meta.traverseChildrenWithPos visit p (Lean.Expr.proj typeName idx b) = (Lean.Expr.proj typeName idx b).updateProj! <$> visit p.pushProj b
- Lean.Meta.traverseChildrenWithPos visit p e = pure e
Instances For
Given an expression fun (x₁ : α₁) ... (xₙ : αₙ) => b
, will run
f
on each of the variable types αᵢ
and b
with the correct MetaM context,
replacing each expression with the output of f
and creating a new lambda.
(that is, correctly instantiating bound variables and repackaging them after)
Equations
- Lean.Meta.traverseLambda visit = Lean.Meta.forgetPos✝ Lean.Meta.traverseLambdaWithPos visit
Instances For
Given an expression (x₁ : α₁) → ... → (xₙ : αₙ) → b
, will run
f
on each of the variable types αᵢ
and b
with the correct MetaM context,
replacing the expression with the output of f
and creating a new forall expression.
(that is, correctly instantiating bound variables and repackaging them after)
Equations
- Lean.Meta.traverseForall visit = Lean.Meta.forgetPos✝ Lean.Meta.traverseForallWithPos visit
Instances For
Similar to traverseLambda
and traverseForall
but with let binders.
Instances For
Maps visit
on each child of the given expression.
Applications, foralls, lambdas and let binders are bundled (as they are bundled in Expr.traverseApp
, traverseForall
, ...).
So traverseChildren f e
where e = `(fn a₁ ... aₙ)
will return
(← f `(fn)) (← f `(a₁)) ... (← f `(aₙ))
rather than (← f `(fn a₁ ... aₙ₋₁)) (← f `(aₙ))
See also Lean.Core.traverseChildren
.