packages feed

pandora-0.2.7: Pandora/Paradigm/Primary/Functor/Proxy.hs

module Pandora.Paradigm.Primary.Functor.Proxy where

import Pandora.Pattern.Functor.Covariant (Covariant ((<$>)))
import Pandora.Pattern.Functor.Contravariant (Contravariant ((>$<)))
import Pandora.Pattern.Functor.Pointable (Pointable (point))
import Pandora.Pattern.Functor.Applicative (Applicative ((<*>)))
import Pandora.Pattern.Functor.Alternative (Alternative ((<+>)))
import Pandora.Pattern.Functor.Distributive (Distributive ((>>-)))
import Pandora.Pattern.Functor.Bindable (Bindable ((>>=)))
import Pandora.Pattern.Functor.Extendable (Extendable ((=>>)))
import Pandora.Pattern.Functor.Monad (Monad)

data Proxy a = Proxy

instance Covariant Proxy where
	_ <$> Proxy = Proxy

instance Contravariant Proxy where
	_ >$< _ = Proxy

instance Pointable Proxy where
	point _ = Proxy

instance Applicative Proxy where
	_ <*> _ = Proxy

instance Alternative Proxy where
	_ <+> _ = Proxy

instance Distributive Proxy where
	_ >>- _ = Proxy

instance Bindable Proxy where
	_ >>= _ = Proxy

instance Monad Proxy

instance Extendable Proxy where
	_ =>> _ = Proxy