/caterwaul/Either/duoid
Copy path to clipboardSource
let kCat = ../Category/Cat/semigroupal
let Set = ../Category/Set/rig
let vObject = Type
let v =
../Category/Monoidal/Cartesian/extractCategory
kCat
Type
vObject
../Category/Set/monoidal/cartesian
let object = Type
let cat = ../Category/Rig/extractMultiplicative kCat vObject object Set
let CommutativeSemigroup =
../Semigroup/Commutative/Type
object
(../Category/Monoidal/extractSemigroupal kCat vObject object cat)
let extractMonoid = ../Functor/Monoidal/extractMonoid object v cat cat
in λ(a : object) →
λ(semigroup : CommutativeSemigroup a) →
{ additive =
extractMonoid
(λ(b : object) → Set.additive.product { _1 = a, _2 = b })
(./functor/monoidal/parallel a semigroup)
, multiplicative =
extractMonoid
(λ(b : object) → Set.additive.product { _1 = a, _2 = b })
(./functor/monoidal/sequential a)
}
: ../Duoid/Type
(kCat.arrow object object)
(../Category/Endofunctor/monoidal/functor v cat)
(λ(b : object) → Set.additive.product { _1 = a, _2 = b })