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)