idris-0.9.7: lib/Control/Category.idr
module Control.Category
import Data.Morphisms
%access public
class Category (cat : Type -> Type -> Type) where
id : cat a a
(.) : cat b c -> cat a b -> cat a c
instance Category Morphism where
id = Mor Builtins.id
(Mor f) . (Mor g) = Mor (f . g)
instance Monad m => Category (Kleislimorphism m) where
id = Kleisli (return . id)
(Kleisli f) . (Kleisli g) = Kleisli $ \a => g a >>= f
infixr 1 >>>
(>>>) : Category cat => cat a b -> cat b c -> cat a c
f >>> g = g . f