An instance of Category (~>) declares the arrow (~>) as a
category. The category with Haskell types as objects and Haskell
functions as arrows. The category with categories as objects and
adjunctions as arrows. The category of all monoids, with monoid
morphisms as arrows. |Category ~> => Category (Op ~>)| |Category
(Discrete n) => Category (Discrete (S n))| |Category (Discrete
Z)| |Monoid m => Category (MonoidA m)| A monoid as a category
with one object. |HasTerminalObject ~> => Category (Peano ~>)|
|(Category c1, Category c2) => Category (:**: c1 c2)| The
product category of category |(Category c, Category d) =>
Category (Nat c d)| Functor category D^C. Objects of D^C are
functors from C to D. Arrows of D^C are natural transformations.
|(Dom m ~ ~>, Cod m ~ ~>, Category ~>, Functor m) => Category
(Kleisli ~> m)| |Category (Dialg f g)| |(Category (Dom t),
Category (Dom s)) => Category (:/\: t s)| Whenever objects are
required at value level, they are represented by their identity
arrows.