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

infixr 8 .
infixr 0 $

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

	($) :: m a b -> m a b
	($) 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

instance Category (->) where
	identity :: a -> a
identity a
x = a
x
	b -> c
f . :: (b -> c) -> (a -> b) -> a -> c
. a -> b
g = \a
x -> b -> c
f (a -> b
g a
x)