Documentation

Init.Control.ExceptCps

The Exception monad transformer using CPS style.

def ExceptCpsT (ε : Type u) (m : Type u → Type v) (α : Type u) :
Type (max (u + 1) v)
Equations
  • ExceptCpsT ε m α = ((β : Type ?u.27) → (αm β)(εm β)m β)
Instances For
@[inline]
def ExceptCpsT.run {m : Type u → Type u_1} {ε α : Type u} [Monad m] (x : ExceptCpsT ε m α) :
m (Except ε α)
@[inline]
def ExceptCpsT.runK {m : Type u → Type u_1} {β ε α : Type u} (x : ExceptCpsT ε m α) (s : ε) (ok : αm β) (error : εm β) :
m β
@[inline]
def ExceptCpsT.runCatch {m : Type u_1 → Type u_2} {α : Type u_1} [Monad m] (x : ExceptCpsT α m α) :
m α
Equations
  • x.runCatch = x α pure pure
@[always_inline]
instance ExceptCpsT.instMonad {ε : Type u_1} {m : Type u_1 → Type u_2} :
Equations
  • ExceptCpsT.instMonad = Monad.mk
theorem ExceptCpsT.instLawfulMonad {σ : Type u_1} {m : Type u_1 → Type u_2} :
instance ExceptCpsT.instMonadExceptOf {ε : Type u_1} {m : Type u_1 → Type u_2} :
@[inline]
def ExceptCpsT.lift {m : Type u_1 → Type u_2} {α ε : Type u_1} [Monad m] (x : m α) :
ExceptCpsT ε m α
Equations
instance ExceptCpsT.instMonadLiftOfMonad {m : Type u_1 → Type u_2} {σ : Type u_1} [Monad m] :
Equations
  • ExceptCpsT.instMonadLiftOfMonad = { monadLift := fun {α : Type ?u.24} => ExceptCpsT.lift }
instance ExceptCpsT.instInhabited {ε : Type u_1} {m : Type u_1 → Type u_2} {α : Type u_1} [Inhabited ε] :
Equations
  • ExceptCpsT.instInhabited = { default := fun (x : Type ?u.32) (x_1 : αm x) (k₂ : εm x) => k₂ default }
@[simp]
theorem ExceptCpsT.run_pure {m : Type u_1 → Type u_2} {ε α : Type u_1} {x : α} [Monad m] :
(pure x).run = pure (Except.ok x)
@[simp]
theorem ExceptCpsT.run_lift {m : Type u → Type u_1} {α ε : Type u} [Monad m] (x : m α) :
(ExceptCpsT.lift x).run = do let ax pure (Except.ok a)
@[simp]
theorem ExceptCpsT.run_throw {m : Type u_1 → Type u_2} {ε β : Type u_1} {e : ε} [Monad m] :
(throw e).run = pure (Except.error e)
@[simp]
theorem ExceptCpsT.run_bind_lift {m : Type u_1 → Type u_2} {α ε β : Type u_1} [Monad m] (x : m α) (f : αExceptCpsT ε m β) :
(ExceptCpsT.lift x >>= f).run = do let ax (f a).run
@[simp]
theorem ExceptCpsT.run_bind_throw {m : Type u_1 → Type u_2} {ε α β : Type u_1} [Monad m] (e : ε) (f : αExceptCpsT ε m β) :
(throw e >>= f).run = (throw e).run
@[simp]
theorem ExceptCpsT.runCatch_pure {m : Type u_1 → Type u_2} {α : Type u_1} {x : α} [Monad m] :
(pure x).runCatch = pure x
@[simp]
theorem ExceptCpsT.runCatch_lift {m : Type u → Type u_1} {α : Type u} [Monad m] [LawfulMonad m] (x : m α) :
(ExceptCpsT.lift x).runCatch = x
@[simp]
theorem ExceptCpsT.runCatch_throw {m : Type u_1 → Type u_2} {α : Type u_1} {a : α} [Monad m] :
(throw a).runCatch = pure a
@[simp]
theorem ExceptCpsT.runCatch_bind_lift {m : Type u_1 → Type u_2} {α β : Type u_1} [Monad m] (x : m α) (f : αExceptCpsT β m β) :
(ExceptCpsT.lift x >>= f).runCatch = do let ax (f a).runCatch
@[simp]
theorem ExceptCpsT.runCatch_bind_throw {m : Type u_1 → Type u_2} {β α : Type u_1} [Monad m] (e : β) (f : αExceptCpsT β m β) :
(throw e >>= f).runCatch = pure e