Copy path to clipboardSource
let cat = ../Category/Cat/semigroupal
let vObject = Type
let v =
      ../Category/Monoidal/Cartesian/extractMonoidal
        cat
        Type
        vObject
        ../Category/Set/monoidal/cartesian
let base = ../Category/Monoidal/extractCategory cat Type vObject v
in  λ(semigroupoid : ../Semigroupoid/Type vObject v base v.arrow) →
      let Comonad = ../Comonad/Type vObject base
      let Day = ./Type vObject v v
      let Day/convolution = ../Day/convolution vObject v v
      in  λ(f : cat.arrow vObject vObject) →
          λ(fComonad : Comonad f) →
          λ(g : cat.arrow vObject vObject) →
          λ(gComonad : Comonad g) →
              { unit =
                  λ(a : vObject) →
                  λ(day : Day { _1 = f, _2 = g } a) →
                    day
                      a
                      ( λ(b : { _1 : vObject, _2 : vObject }) →
                        λ(fn : { _1 : b._1, _2 : b._2 } → a) →
                        λ(d : { _1 : f b._1, _2 : g b._2 }) →
                          fn
                            { _1 = fComonad.unit b._1 d._1
                            , _2 = gComonad.unit b._2 d._2
                            }
                      )
              , product =
                  λ(a : vObject) →
                  λ(day : Day { _1 = f, _2 = g } a) →
                    day
                      (Day { _1 = f, _2 = g } (Day { _1 = f, _2 = g } a))
                      ( λ(b : { _1 : vObject, _2 : vObject }) →
                        λ(fn : { _1 : b._1, _2 : b._2 } → a) →
                        λ(d : { _1 : f b._1, _2 : g b._2 }) →
                        λ(r0 : vObject) →
                        λ ( day0
                          : Day/convolution f g (Day { _1 = f, _2 = g } a) r0
                          ) →
                          day0
                            { _1 = f b._1, _2 = g b._2 }
                            ( λ(p : { _1 : f b._1, _2 : g b._2 }) →
                              λ(r1 : vObject) →
                              λ(day1 : Day/convolution f g a r1) →
                                day1 b fn p
                            )
                            { _1 = fComonad.product b._1 d._1
                            , _2 = gComonad.product b._2 d._2
                            }
                      )
              }
            : Comonad (Day { _1 = f, _2 = g })