Documentation

Init.Data.Iterators.Combinators.Monadic.ULift

def Std.Iterators.ULiftT (n : Type (max u v) → Type v') (α : Type u) :
Type v'

ULiftT.{v, u} shrinks a monad on Type max u v to a monad on Type u.

Equations
Instances For
    @[inline]
    def Std.Iterators.ULiftT.run {n : Type (max u v) → Type v'} {α : Type u} (x : ULiftT n α) :
    n (ULift α)

    Returns the underlying n-monadic representation of a ULiftT n α value.

    Equations
    Instances For
      instance Std.Iterators.instMonadULiftT {n : Type (max u v) → Type v'} [Monad n] :
      Equations
      • One or more equations did not get rendered due to their size.
      @[simp]
      theorem Std.Iterators.ULiftT.run_pure {n : Type (max u v) → Type v'} [Monad n] {α : Type u} {a : α} :
      (pure a).run = pure { down := a }
      @[simp]
      theorem Std.Iterators.ULiftT.run_bind {n : Type (max u v) → Type v'} [Monad n] {α β : Type u} {x : ULiftT n α} {f : αULiftT n β} :
      (x >>= f).run = do let ax.run (f a.down).run
      @[simp]
      theorem Std.Iterators.ULiftT.run_map {n : Type (max u v) → Type v'} [Monad n] {α β : Type u} {x : ULiftT n α} {f : αβ} :
      (f <$> x).run = do let ax.run pure { down := f a.down }
      @[unbox]
      structure Std.Iterators.Types.ULiftIterator (α : Type u) (m : Type u → Type u') (n : Type (max u v) → Type v') (β : Type u) (lift : γ : Type u⦄ → m γULiftT n γ) :
      Type (max u v)

      Internal state of the uLift iterator combinator. Do not depend on its internals.

      Instances For
        @[inline]
        def Std.Iterators.Types.ULiftIterator.Monadic.modifyStep {α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} {lift : γ : Type u⦄ → m γULiftT n γ} (step : IterStep (IterM m β) β) :
        IterStep (IterM n (ULift β)) (ULift β)

        Transforms a step of the base iterator into a step of the uLift iterator.

        Equations
        Instances For
          instance Std.Iterators.Types.ULiftIterator.instIterator {α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} {lift : γ : Type u⦄ → m γULiftT n γ} [Iterator α m β] [Monad n] :
          Iterator (ULiftIterator α m n β lift) n (ULift β)
          Equations
          • One or more equations did not get rendered due to their size.
          instance Std.Iterators.Types.ULiftIterator.instFinite {α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} {lift : γ : Type u⦄ → m γULiftT n γ} [Iterator α m β] [Finite α m] [Monad n] :
          Finite (ULiftIterator α m n β lift) n
          instance Std.Iterators.Types.ULiftIterator.instProductive {α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} {lift : γ : Type u⦄ → m γULiftT n γ} [Iterator α m β] [Productive α m] [Monad n] :
          Productive (ULiftIterator α m n β lift) n
          instance Std.Iterators.Types.ULiftIterator.instIteratorLoop {α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} {lift : γ : Type u⦄ → m γULiftT n γ} {o : Type x → Type x'} [Monad n] [Monad o] [Iterator α m β] :
          IteratorLoop (ULiftIterator α m n β lift) n o
          Equations
          @[inline]
          def Std.IterM.uLift {α β : Type u} {m : Type u → Type u'} (it : IterM m β) (n : Type (max u v) → Type v') [lift : MonadLiftT m (Iterators.ULiftT n)] :
          IterM n (ULift β)

          Transforms an m-monadic iterator with values in β into an n-monadic iterator with values in ULift β. Requires a MonadLift m (ULiftT n) instance.

          Marble diagram:

          it            ---a    ----b    ---c    --d    ---⊥
          it.uLift n    ---.up a----.up b---.up c--.up d---⊥
          

          Termination properties:

          • Finite: only if the original iterator is finite
          • Productive: only if the original iterator is productive
          Equations
          Instances For