module Pandora.Pattern.Category (Category (..)) where

import Pandora.Core.Functor (type (~~>))

-- infixl 1 #
infixl 2 #
infixr 0 $
infixr 9 .

class Category (m :: * -> * -> *) where
	identity :: m a a
	(.) :: m b c -> m a b -> m a c

	($) :: m ~~> m
	($) m a b
f = m b b
forall (m :: * -> * -> *) a. Category m => m a a
identity m b b -> m a b -> m a b
forall (m :: * -> * -> *) b c a.
Category m =>
m b c -> m a b -> m a c
. m a b
f

	(#) :: m ~~> m
	(#) m a b
f = m b b
forall (m :: * -> * -> *) a. Category m => m a a
identity m b b -> m a b -> m a b
forall (m :: * -> * -> *) b c a.
Category m =>
m b c -> m a b -> m a c
. m a b
f