module Control.Category 
	( (>>>), (<<<), Category ((.), id)
	) where

import Prelude hiding (id,(.))
import qualified Prelude hiding (flip)

class Category (~>) where
	(.) :: (b ~> c) -> (a ~> b) -> a ~> c
	id :: a ~> a

(<<<) :: Category (~>) => (b ~> c) -> (a ~> b) -> a ~> c
(<<<) = (.)

(>>>) :: Category (~>) => (a ~> b) -> (b ~> c) -> a ~> c
(>>>) = flip (.)

instance Category (->) where
	(.) = (Prelude..)
	id = Prelude.id