pandora-0.2.5: Pandora/Paradigm/Basis/Kan.hs
module Pandora.Paradigm.Basis.Kan (Lan (..), Ran (..)) where
import Pandora.Pattern.Category ((.))
import Pandora.Pattern.Functor.Contravariant (Contravariant ((>$<)))
import Pandora.Pattern.Functor.Covariant (Covariant ((<$>)))
import Pandora.Pattern.Functor.Divariant (($))
import Pandora.Paradigm.Controlflow.Joint.Interpreted (Interpreted (Primary, run))
newtype Lan t u b a = Lan ((t b -> a) -> u b)
instance Contravariant (Lan t u b) where
f >$< Lan x = Lan $ x . (f .)
instance Interpreted (Lan t u b) where
type Primary (Lan t u b) a = (t b -> a) -> u b
run (Lan x) = x
newtype Ran t u b a = Ran ((a -> t b) -> u b)
instance Covariant (Ran t u b) where
f <$> Ran x = Ran $ x . (. f)
instance Interpreted (Ran t u b) where
type Primary (Ran t u b) a = (a -> t b) -> u b
run (Ran x) = x