module Pandora.Paradigm.Primary.Functor.Convergence where import Pandora.Pattern.Category (($), (#)) import Pandora.Pattern.Functor.Contravariant (Contravariant ((>$<))) import Pandora.Paradigm.Primary.Algebraic () data Convergence r a = Convergence (a -> a -> r) instance Contravariant (->) (->) (Convergence r) where a -> b f >$< :: (a -> b) -> Convergence r b -> Convergence r a >$< Convergence b -> b -> r g = (a -> a -> r) -> Convergence r a forall r a. (a -> a -> r) -> Convergence r a Convergence ((a -> a -> r) -> Convergence r a) -> (a -> a -> r) -> Convergence r a forall (m :: * -> * -> *) a b. Category m => m (m a b) (m a b) $ \a x a y -> b -> b -> r g (b -> b -> r) -> b -> b -> r forall (m :: * -> * -> *) a b. Category m => m (m a b) (m a b) # a -> b f a x (b -> r) -> b -> r forall (m :: * -> * -> *) a b. Category m => m (m a b) (m a b) # a -> b f a y