----------------------------------------------------------------------------- -- -- Module : Data.DualCategory.Instances.GeneralisedFunctor -- Copyright : -- License : BSD3 -- -- Maintainer : -- Stability : -- Portability : -- -- | -- ----------------------------------------------------------------------------- {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} module Data.DualCategory.Instances.GeneralisedFunctor ( ) where import Data.DualCategory.DualCategory (DualCategory(DualCategory)) import Prelude hiding (Functor, fmap) import Control.GeneralisedFunctor.Functor ( FunctorParam, Functor(fmap, FunctorInput, FunctorOutput, FunctorCategory), ExoFunctor(exomap, ExoInput, ExoOutput), ContraFunctorParam, ContraFunctor(contramap, ContraFunctorInput, ContraFunctorOutput, ContraFunctorCategory), ExoContraFunctor(exocontramap, ExoContraInput, ExoContraOutput), ) instance ExoFunctor (DualCategory c1 c2) c1 where type ExoInput (DualCategory c1 c2) c1 t = t type ExoOutput (DualCategory c1 c2) c1 t = t exomap (DualCategory f _) = f instance ExoContraFunctor (DualCategory c1 c2) (DualCategory c2 c1) where type ExoContraInput (DualCategory c1 c2) (DualCategory c2 c1) t = t type ExoContraOutput (DualCategory c1 c2) (DualCategory c2 c1) t = t exocontramap (DualCategory f g) = DualCategory g f