------------------------------------------------------------------------------------------- -- | -- Module : Control.Bifunctor.Biff -- Copyright : 2008 Edward Kmett -- License : BSD3 -- -- Maintainer : Edward Kmett -- Stability : experimental -- Portability : portable -- ------------------------------------------------------------------------------------------- module Control.Bifunctor.Biff ( module Control.Bifunctor.Monoidal , BiffB(..) ) where import Control.Bifunctor.Monoidal newtype BiffB p f g a b = BiffB { runBiffB :: p (f a) (g b) } instance (Functor f, Bifunctor p, Functor g) => Bifunctor (BiffB p f g) where bimap f g = BiffB . bimap (fmap f) (fmap g) . runBiffB instance (Functor f, Braided p) => Braided (BiffB p f f) where braid = BiffB . braid . runBiffB instance (Functor f, Symmetric p) => Symmetric (BiffB p f f) instance (Functor f, Bifunctor p, Functor g) => Functor (BiffB p f g a) where fmap f = bimap id f