module Pandora.Paradigm.Structure.Ability.Monotonic where
import Pandora.Pattern ((.|..))
import Pandora.Pattern.Category ((/))
import Pandora.Paradigm.Primary.Functor.Function ((!))
class Monotonic a e where
{-# MINIMAL reduce #-}
reduce :: (a -> r -> r) -> r -> e -> r
resolve :: (a -> r) -> r -> e -> r
resolve a -> r
g = (a -> r -> r) -> r -> e -> r
forall a e r. Monotonic a e => (a -> r -> r) -> r -> e -> r
reduce ((a -> r -> r) -> r -> e -> r) -> (a -> r -> r) -> r -> e -> r
forall (m :: * -> * -> *). Category m => m ~~> m
/ a -> r
g (a -> r) -> (((->) a :. (->) r) := a) -> a -> r -> r
forall (v :: * -> * -> *) a c d b.
(Category v, Covariant (v a)) =>
v c d -> ((v a :. v b) := c) -> (v a :. v b) := d
.|.. (!)
instance Monotonic a a where
reduce :: (a -> r -> r) -> r -> a -> r
reduce a -> r -> r
f r
r a
x = a -> r -> r
f a
x r
r