Quite a few categories (
monoidal categories) will permit
"products" of objects as objects again – in the Haskell sense those
are tuples – allowing for "dyadic morphisms"
(x,y) ~> r.
Together with a unique
UnitObject, this makes for a monoidal
structure, with a few natural isomorphisms. Ordinary tuples may not
always be powerful enough to express the product objects; we avoid
making a dedicated associated type for the sake of simplicity, but
allow for an extra constraint to be imposed on objects prior to
consideration of pair-building.
The name
Cartesian is disputable: in category theory that would
rather Imply
cartesian closed category (which we represent with
Curry).
Monoidal would make sense, but we reserve that
to
Functors.