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.
A Category equipped with a Tensort where the
Tensor unit i is the terminal object in
cat and thus every object a is equipped with a
morphism <math>, which we call kill.
Slightly unfair 2-way Cartesian product: given two (possibly infinite)
lists, produce a single list such that whenever v and
w have finite indices in the input lists, (v,w) has
finite index in the output list. Lower indices occur as the
fst part of the tuple more frequently, but not exponentially
so.