A monad transformer that equips a monad with a value.
This is a generalization of ReaderT where the value is not
necessarily directly readable through the monad.
Equations
- Lake.EquipT ρ m α = (ρ → m α)
Instances For
@[inline]
def Lake.EquipT.mk {ρ : Type u_1} {m : Type u_2 → Type u_3} {α : Type u_2} (x : ρ → m α) :
EquipT ρ m α
Equations
- Lake.EquipT.mk x = x
Instances For
@[instance_reducible]
instance Lake.EquipT.instInhabited {m : Type u_1 → Type u_2} {ρ : Type u_3} {α : Type u_1} [Inhabited (m α)] :
Equations
- Lake.EquipT.instInhabited = { default := Lake.EquipT.mk fun (x : ρ) => default }
@[instance_reducible]
Equations
- Lake.EquipT.instFunctor = { map := fun {α β : Type ?u.3} => Lake.EquipT.map }
@[instance_reducible]
Equations
- Lake.EquipT.instPure = { pure := fun {α : Type ?u.3} => Lake.EquipT.pure }
@[instance_reducible]
Equations
- Lake.EquipT.instSeq = { seq := fun {α β : Type ?u.3} => Lake.EquipT.seq }
@[instance_reducible]
instance Lake.EquipT.instApplicative {m : Type u_1 → Type u_2} {ρ : Type u_3} [Applicative m] :
Applicative (EquipT ρ m)
Equations
- One or more equations did not get rendered due to their size.
@[instance_reducible]
Equations
- Lake.EquipT.instBind = { bind := fun {α β : Type ?u.3} => Lake.EquipT.bind }
@[instance_reducible]
Equations
- Lake.EquipT.instMonad = { toApplicative := Lake.EquipT.instApplicative, toBind := Lake.EquipT.instBind }
@[inline]
def Lake.EquipT.lift {m : Type u_1 → Type u_2} {ρ : Type u_3} {α : Type u_1} (t : m α) :
EquipT ρ m α
Equations
- Lake.EquipT.lift t x✝ = t
Instances For
@[instance_reducible]
Equations
- Lake.EquipT.instMonadLift = { monadLift := fun {α : Type ?u.3} => Lake.EquipT.lift }
@[instance_reducible]
instance Lake.EquipT.instMonadFunctor {m : Type u_1 → Type u_2} {ρ : Type u_3} :
MonadFunctor m (EquipT ρ m)
Equations
- Lake.EquipT.instMonadFunctor = { monadMap := fun {α : Type ?u.3} (f : {β : Type ?u.3} → m β → m β) (x : Lake.EquipT ρ m α) => Lake.EquipT.mk fun (ctx : ρ) => f (x.run ctx) }
@[inline]
def Lake.EquipT.failure {m : Type u_1 → Type u_2} {ρ : Type u_3} {α : Type u_1} [Alternative m] :
EquipT ρ m α
Equations
Instances For
@[inline]
Instances For
@[instance_reducible]
instance Lake.EquipT.instAlternative {m : Type u_1 → Type u_2} {ρ : Type u_3} [Alternative m] :
Alternative (EquipT ρ m)
Equations
- Lake.EquipT.instAlternative = { toApplicative := Lake.EquipT.instApplicative, failure := fun {α : Type ?u.3} => Lake.EquipT.failure, orElse := fun {α : Type ?u.3} => Lake.EquipT.orElse }
@[inline]
def Lake.EquipT.throw {ε : Type u_1} {m : Type u_2 → Type u_3} {ρ : Type u_4} {α : Type u_2} [MonadExceptOf ε m] (e : ε) :
EquipT ρ m α
Equations
- Lake.EquipT.throw e x✝ = throw e
Instances For
@[inline]
def Lake.EquipT.tryCatch {ε : Type u_1} {m : Type u_2 → Type u_3} {ρ : Type u_4} {α : Type u_2} [MonadExceptOf ε m] (self : EquipT ρ m α) (c : ε → EquipT ρ m α) :
EquipT ρ m α
Equations
- self.tryCatch c f = tryCatchThe ε (self f) fun (e : ε) => c e f
Instances For
@[instance_reducible]
instance Lake.EquipT.instMonadExceptOf {m : Type u_1 → Type u_2} {ρ : Type u_3} (ε : Type u_4) [MonadExceptOf ε m] :
MonadExceptOf ε (EquipT ρ m)
Equations
- Lake.EquipT.instMonadExceptOf ε = { throw := fun {α : Type ?u.4} => Lake.EquipT.throw, tryCatch := fun {α : Type ?u.4} => Lake.EquipT.tryCatch }
@[inline]
def Lake.EquipT.tryFinally' {m : Type (max u_1 u_2) → Type u_3} {ρ : Type u_4} {α β : Type (max u_1 u_2)} [MonadFinally m] [Monad m] (x : EquipT ρ m α) (f : Option α → EquipT ρ m β) :
Equations
- x.tryFinally' f ctx = tryFinally' (x.run ctx) fun (a? : Option α) => (f a?).run ctx
Instances For
@[instance_reducible]
instance Lake.EquipT.instMonadFinallyOfMonad {m : Type (max u_1 u_2) → Type u_3} {ρ : Type u_4} [MonadFinally m] [Monad m] :
MonadFinally (EquipT ρ m)
Equations
- Lake.EquipT.instMonadFinallyOfMonad = { tryFinally' := fun {α β : Type (max ?u.4 ?u.3)} => Lake.EquipT.tryFinally' }