{-# OPTIONS --cubical #-}
open import MndContainer as MC
open import CategoryTheory
open import ContainersPlus
open import Level renaming (suc to lsuc ; zero to lzero)
open import Function
open import Cubical.Data.Sigma
open import Cubical.Foundations.Prelude hiding (_◁_)
open import Cubical.HITs.PropositionalTruncation
module _ where
module MndContainerToMonad {ℓs ℓp : Level} (S : Set ℓs) (P : S → Set ℓp)
                           (MCon : MndContainer ℓs ℓp (S ◁ P)) where
  open MC.MndContainer MCon hiding (S ; P)
  open MC.IsMndContainer isMndContainer
  open _⇒_
  open Monad
  monad : Monad (ℓs ⊔ ℓp) (ℓs ⊔ ℓp) ⟦ S ◁ P ⟧f
  α (η monad) X x = (ι , const x)
  nat (η monad) X Y f = ∣ refl ∣₁
  α (μ monad) X (s , f) = (σ s (fst ∘ f) , λ p → snd (f (pr₁ _ _ p)) (pr₂ _ _ p))
  nat (μ monad) X Y f = ∣ refl ∣₁
  μ-unit-l monad i X (s , f) = (unit-l s i , λ p → f (pr-unit-l i p))
  μ-unit-r monad i X (s , f) = (unit-r s i , λ p → f (pr-unit-r i p))
  μ-assoc monad i X (s , f) = (assoc s (fst ∘ f) (λ p p' → fst (snd (f p) p')) i 
                              , λ p → snd (snd (f (pr-mul₁ i p)) (pr-mul₁₂ i p)) (pr-mul₂₂ i p))