Copy path to clipboardSource
let kCat = ../Category/Cat/semigroupal
let base = ../Category/Monoidal/extractCategory kCat
let vObject = Type
let v =
      ../Category/Monoidal/Cartesian/extractCategory
        kCat
        Type
        vObject
        ../Category/Set/monoidal/cartesian
let object = Type
let cat =
      ../Category/Monoidal/Cartesian/extractMonoidal
        kCat
        vObject
        object
        ../Category/Set/monoidal/cartesian
in  λ(f : kCat.arrow object object) →
    λ ( functor
      : ../Functor/Endo/Type vObject object v (base vObject object cat) f
      ) →
    λ(monad : ./Type object (base vObject object cat) f) →
        { map = functor.map
        , unit =
            λ(a : object) →
            λ(fn : cat.arrow { _1 = cat.unit, _2 = a }) →
              monad.unit a (fn {=})
        , product =
            λ(i : object) →
            λ ( day
              : ∀(r : Type) → ../Day/convolution object cat cat f f i r → r
              ) →
              day
                (f i)
                ( λ(b : { _1 : object, _2 : object }) →
                  λ(fn : cat.arrow { _1 = cat.product b, _2 = i }) →
                  λ(d : { _1 : f b._1, _2 : f b._2 }) →
                    monad.product
                      i
                      ( functor.map
                          (cat.arrow { _1 = b._2, _2 = i })
                          (f i)
                          ( λ(fn : cat.arrow { _1 = b._2, _2 = i }) →
                              functor.map b._2 i fn d._2
                          )
                          ( functor.map
                              b._1
                              (cat.arrow { _1 = b._2, _2 = i })
                              ( λ(x : b._1) →
                                λ(y : b._2) →
                                  fn { _1 = x, _2 = y }
                              )
                              d._1
                          )
                      )
                )
        }
      : ../Functor/Monoidal/Type object v cat cat f