Documentation

Init.While

repeatM #

repeatM f a iterates f : α → m (α ⊕ β), recursing on .inl and terminating on .inr.

@[reducible, inline]
abbrev repeatM.body {α : Type u} {m : Type u → Type v} [Monad m] {β : Type u} (f : αm (α β)) (recur : αm β) (a : α) :
m β

The body of repeatM: run f a, recurse via recur on .inl, return on .inr.

Instances For
    @[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.

    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.

      structure Lean.Loop :
        Instances For
          @[inline]
          def Lean.Loop.forIn {β : Type u} {m : Type u → Type v} [Monad m] :
          Loop(init : β) → (f : Unitβm (ForInStep β)) → m β
          Instances For
            @[instance_reducible]