repeatM #
repeatM f a iterates f : α → m (α ⊕ β), recursing on .inl and terminating on
.inr. The public unfolding lemma repeatM_eq_of_monadTail, which requires a
Lean.Order.MonadTail m instance, lives in Init.Internal.Order.While to keep this
module's import closure small.
@[implemented_by _private.Init.While.0.repeatM.erased]
def
repeatM
{α : Type u}
{m : Type u → Type v}
[Monad m]
{β : Type u}
[Nonempty β]
(f : α → m (α ⊕ β))
(a : α)
:
m β
repeatM f a iterates f at a, recursing on .inl and terminating on .inr.
Its unfolding lemma is repeatM_eq_of_monadTail.
Instances For
Loop type backing repeat/while/repeat ... until #
The parsers and elaborators for repeat, while, and repeat ... until live in
Lean.Parser.Do and Lean.Elab.BuiltinDo.Repeat. This module only provides the
Loop type (and ForIn instance) that those elaborators expand to.