Copy path to clipboardSource
let cat = ../Category/Cat/semigroupal
let vObject = Type
let Set = ../Category/Rig/extractAdditive cat vObject Type ../Category/Set/rig
in  λ(a : Type) →
        { unit = λ(b : Type) → (Set.product { _1 = a, _2 = b }).Right
        , product =
            λ(b : Type) →
            λ ( fa
              : Set.product { _1 = a, _2 = Set.product { _1 = a, _2 = b } }
              ) →
              merge
                { Left = (Set.product { _1 = a, _2 = b }).Left
                , Right = λ(e : Set.product { _1 = a, _2 = b }) → e
                }
                ( merge
                    { Left =
                        ( Set.product
                            { _1 = a, _2 = Set.product { _1 = a, _2 = b } }
                        ).Left
                    , Right =
                        ( Set.product
                            { _1 = a, _2 = Set.product { _1 = a, _2 = b } }
                        ).Right
                    }
                    fa
                )
        }
      : ../Monad/Type
          Type
          ( ../Category/Monoidal/Cartesian/extractCategory
              cat
              vObject
              Type
              ../Category/Set/monoidal/cartesian
          )
          (λ(b : Type) → Set.product { _1 = a, _2 = b })