Typeclass for lawful monad lifting functions #
This module provides a typeclass LawfulMonadLiftFunction f
that asserts that a function f
mapping values from one monad to another monad commutes with pure
and bind
. This equivalent to
the requirement that the MonadLift(T)
instance induced by f
admits a
LawfulMonadLift(T)
instance.
instance
Std.Internal.instLawfulMonadLiftFunctionId
{m : Type u → Type v}
[Monad m]
:
LawfulMonadLiftFunction fun ⦃α : Type u⦄ => id
instance
Std.Internal.instLawfulMonadLiftFunctionMonadLiftOfLawfulMonadLiftT
{m : Type u → Type v}
[Monad m]
{n : Type u → Type w}
[Monad n]
[MonadLiftT m n]
[LawfulMonadLiftT m n]
:
LawfulMonadLiftFunction fun ⦃α : Type u⦄ => monadLift
theorem
Std.Internal.LawfulMonadLiftFunction.lift_map
{m : Type u → Type v}
{n : Type u → Type w}
[Monad m]
[Monad n]
{lift : ⦃α : Type u⦄ → m α → n α}
{α β : Type u}
[LawfulMonad m]
[LawfulMonad n]
[LawfulMonadLiftFunction lift]
(f : α → β)
(ma : m α)
:
theorem
Std.Internal.LawfulMonadLiftFunction.lift_seq
{m : Type u → Type v}
{n : Type u → Type w}
[Monad m]
[Monad n]
{lift : ⦃α : Type u⦄ → m α → n α}
{α β : Type u}
[LawfulMonad m]
[LawfulMonad n]
[LawfulMonadLiftFunction lift]
(mf : m (α → β))
(ma : m α)
:
theorem
Std.Internal.LawfulMonadLiftFunction.lift_seqLeft
{m : Type u → Type v}
{n : Type u → Type w}
[Monad m]
[Monad n]
{lift : ⦃α : Type u⦄ → m α → n α}
{α β : Type u}
[LawfulMonad m]
[LawfulMonad n]
[LawfulMonadLiftFunction lift]
(x : m α)
(y : m β)
:
theorem
Std.Internal.LawfulMonadLiftFunction.lift_seqRight
{m : Type u → Type v}
{n : Type u → Type w}
[Monad m]
[Monad n]
{lift : ⦃α : Type u⦄ → m α → n α}
{α β : Type u}
[LawfulMonad m]
[LawfulMonad n]
[LawfulMonadLiftFunction lift]
(x : m α)
(y : m β)
:
def
Std.Internal.LawfulMonadLiftFunction.idToMonad
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
Equations
- ⋯ = ⋯
Instances For
instance
Std.Internal.instLawfulMonadLiftOfLawfulMonadLiftFunction
{m : Type u → Type v}
{n : Type u → Type w}
[Monad m]
[Monad n]
{lift : ⦃α : Type u⦄ → m α → n α}
[LawfulMonadLiftFunction lift]
:
LawfulMonadLift m n
instance
Std.Internal.instLawfulMonadLiftFunctionOfLawfulMonadLiftBindFunctionBindOfLawfulMonad
{m : Type u → Type v}
{n : Type u → Type w}
[Monad m]
[Monad n]
{lift : ⦃α : Type u⦄ → m α → n α}
[LawfulMonadLiftBindFunction fun (x x_1 : Type u) (f : x → n x_1) (x_2 : m x) => lift x_2 >>= f]
[LawfulMonad n]
:
def
Std.Internal.LawfulMonadLiftBindFunction.id
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
LawfulMonadLiftBindFunction fun (x : Type u_1) (x_1 : Type u) (f : x → m x_1) (x_2 : Id x) => f x_2.run
Equations
- ⋯ = ⋯
Instances For
instance
Std.Internal.instLawfulMonadLiftBindFunctionBindMonadLiftOfLawfulMonadLiftTOfLawfulMonad
{m : Type u → Type v}
[Monad m]
{n : Type u → Type w}
[Monad n]
[MonadLiftT m n]
[LawfulMonadLiftT m n]
[LawfulMonad n]
:
LawfulMonadLiftBindFunction fun (γ δ : Type u) (f : γ → n δ) (x : m γ) => monadLift x >>= f
instance
Std.Internal.instLawfulMonadLiftBindFunctionIdRunOfLawfulMonad
{n : Type u → Type w}
[Monad n]
[LawfulMonad n]
:
LawfulMonadLiftBindFunction fun (γ : Type u_1) (δ : Type u) (f : γ → n δ) (x : Id γ) => f x.run