-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Adjunctions -- -- Adjunctions @package adjunctions @version 0.1 module Data.Functor.Adjunction class (Functor f, Functor g) => Adjunction f g | f -> g, g -> f unit :: Adjunction f g => a -> g (f a) counit :: Adjunction f g => f (g a) -> a leftAdjunct :: Adjunction f g => (f a -> b) -> a -> g b rightAdjunct :: Adjunction f g => (a -> g b) -> f a -> b instance Adjunction f g => Adjunction (IdentityT f) (IdentityT g) instance Adjunction Identity Identity instance Adjunction ((,) e) ((->) e) module Control.Monad.Trans.Adjoint type Adjoint f g = AdjointT f g Identity runAdjoint :: Functor g => Adjoint f g a -> g (f a) adjoint :: Functor g => g (f a) -> Adjoint f g a newtype AdjointT f g m a AdjointT :: g (m (f a)) -> AdjointT f g m a runAdjointT :: AdjointT f g m a -> g (m (f a)) instance (Adjunction f g, Traversable f) => MonadTrans (AdjointT f g) instance (Adjunction f g, Monad m) => Monad (AdjointT f g m) instance (Adjunction f g, Monad m) => Applicative (AdjointT f g m) instance (Adjunction f g, Monad m) => Functor (AdjointT f g m)