Portability  nonportable 

Stability  experimental 
Maintainer  sjoerd@w3future.com 
Category
class Category (~>) whereSource
An instance of Category (~>)
declares the arrow (~>)
as a category.
Category (>)  The category with Haskell types as objects and Haskell functions as arrows. 
Category Cat 

Category AdjArrow  The category with categories as objects and adjunctions as arrows. 
Category Mon  The category of all monoids, with monoid morphisms as arrows. 
Category Boolean 

Category Omega  
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) 
type Obj (~>) a = a ~> aSource
Whenever objects are required at value level, they are represented by their identity arrows.