packages feed

pandora-0.5.3: Pandora/Pattern/Category.hs

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

import Pandora.Pattern.Semigroupoid (Semigroupoid ((.)))

infixl 1 <--------
infixl 2 <-------
infixl 3 <------
infixl 4 <-----
infixl 5 <----
infixl 6 <---
infixl 7 <--

infixr 1 -------->
infixr 2 ------->
infixr 3 ------>
infixr 4 ----->
infixr 5 ---->
infixr 6 --->
infixr 7 -->

{- |
> When providing a new instance, you should ensure it satisfies:
> * Left identity: identity . f ≡ f
> * Right identity: f . identity ≡ f
-}

class Semigroupoid m => Category m where
	identity :: m a a

	(<--------), (<-------), (<------), (<-----), (<----), (<---), (<--) :: m (m a b) (m a b)
	(<--------) = identity . identity
	(<-------) = identity . identity
	(<------) = identity . identity
	(<-----) = identity . identity
	(<----) = identity . identity
	(<---) = identity . identity
	(<--) = identity . identity

	(-------->), (------->), (------>), (----->), (---->), (--->), (-->) :: m (m a b) (m a b)
	(-------->) = identity . identity
	(------->) = identity . identity
	(------>) = identity . identity
	(----->) = identity . identity
	(---->) = identity . identity
	(--->) = identity . identity
	(-->) = identity . identity