Typeclass for lawfule 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 β)
:
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