{-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE DataKinds #-} module Control.Category.OneObject where import Prelude hiding (id, (.)) import Control.Category newtype OneObject m (a :: ()) (b :: ()) = OneObject m deriving stock (Int -> OneObject m a b -> ShowS [OneObject m a b] -> ShowS OneObject m a b -> String (Int -> OneObject m a b -> ShowS) -> (OneObject m a b -> String) -> ([OneObject m a b] -> ShowS) -> Show (OneObject m a b) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a forall m (a :: ()) (b :: ()). Show m => Int -> OneObject m a b -> ShowS forall m (a :: ()) (b :: ()). Show m => [OneObject m a b] -> ShowS forall m (a :: ()) (b :: ()). Show m => OneObject m a b -> String $cshowsPrec :: forall m (a :: ()) (b :: ()). Show m => Int -> OneObject m a b -> ShowS showsPrec :: Int -> OneObject m a b -> ShowS $cshow :: forall m (a :: ()) (b :: ()). Show m => OneObject m a b -> String show :: OneObject m a b -> String $cshowList :: forall m (a :: ()) (b :: ()). Show m => [OneObject m a b] -> ShowS showList :: [OneObject m a b] -> ShowS Show) deriving newtype (OneObject m a b -> OneObject m a b -> Bool (OneObject m a b -> OneObject m a b -> Bool) -> (OneObject m a b -> OneObject m a b -> Bool) -> Eq (OneObject m a b) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a forall m (a :: ()) (b :: ()). Eq m => OneObject m a b -> OneObject m a b -> Bool $c== :: forall m (a :: ()) (b :: ()). Eq m => OneObject m a b -> OneObject m a b -> Bool == :: OneObject m a b -> OneObject m a b -> Bool $c/= :: forall m (a :: ()) (b :: ()). Eq m => OneObject m a b -> OneObject m a b -> Bool /= :: OneObject m a b -> OneObject m a b -> Bool Eq, Eq (OneObject m a b) Eq (OneObject m a b) => (OneObject m a b -> OneObject m a b -> Ordering) -> (OneObject m a b -> OneObject m a b -> Bool) -> (OneObject m a b -> OneObject m a b -> Bool) -> (OneObject m a b -> OneObject m a b -> Bool) -> (OneObject m a b -> OneObject m a b -> Bool) -> (OneObject m a b -> OneObject m a b -> OneObject m a b) -> (OneObject m a b -> OneObject m a b -> OneObject m a b) -> Ord (OneObject m a b) OneObject m a b -> OneObject m a b -> Bool OneObject m a b -> OneObject m a b -> Ordering OneObject m a b -> OneObject m a b -> OneObject m a b forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a forall m (a :: ()) (b :: ()). Ord m => Eq (OneObject m a b) forall m (a :: ()) (b :: ()). Ord m => OneObject m a b -> OneObject m a b -> Bool forall m (a :: ()) (b :: ()). Ord m => OneObject m a b -> OneObject m a b -> Ordering forall m (a :: ()) (b :: ()). Ord m => OneObject m a b -> OneObject m a b -> OneObject m a b $ccompare :: forall m (a :: ()) (b :: ()). Ord m => OneObject m a b -> OneObject m a b -> Ordering compare :: OneObject m a b -> OneObject m a b -> Ordering $c< :: forall m (a :: ()) (b :: ()). Ord m => OneObject m a b -> OneObject m a b -> Bool < :: OneObject m a b -> OneObject m a b -> Bool $c<= :: forall m (a :: ()) (b :: ()). Ord m => OneObject m a b -> OneObject m a b -> Bool <= :: OneObject m a b -> OneObject m a b -> Bool $c> :: forall m (a :: ()) (b :: ()). Ord m => OneObject m a b -> OneObject m a b -> Bool > :: OneObject m a b -> OneObject m a b -> Bool $c>= :: forall m (a :: ()) (b :: ()). Ord m => OneObject m a b -> OneObject m a b -> Bool >= :: OneObject m a b -> OneObject m a b -> Bool $cmax :: forall m (a :: ()) (b :: ()). Ord m => OneObject m a b -> OneObject m a b -> OneObject m a b max :: OneObject m a b -> OneObject m a b -> OneObject m a b $cmin :: forall m (a :: ()) (b :: ()). Ord m => OneObject m a b -> OneObject m a b -> OneObject m a b min :: OneObject m a b -> OneObject m a b -> OneObject m a b Ord, NonEmpty (OneObject m a b) -> OneObject m a b OneObject m a b -> OneObject m a b -> OneObject m a b (OneObject m a b -> OneObject m a b -> OneObject m a b) -> (NonEmpty (OneObject m a b) -> OneObject m a b) -> (forall b. Integral b => b -> OneObject m a b -> OneObject m a b) -> Semigroup (OneObject m a b) forall b. Integral b => b -> OneObject m a b -> OneObject m a b forall a. (a -> a -> a) -> (NonEmpty a -> a) -> (forall b. Integral b => b -> a -> a) -> Semigroup a forall m (a :: ()) (b :: ()). Semigroup m => NonEmpty (OneObject m a b) -> OneObject m a b forall m (a :: ()) (b :: ()). Semigroup m => OneObject m a b -> OneObject m a b -> OneObject m a b forall m (a :: ()) (b :: ()) b. (Semigroup m, Integral b) => b -> OneObject m a b -> OneObject m a b $c<> :: forall m (a :: ()) (b :: ()). Semigroup m => OneObject m a b -> OneObject m a b -> OneObject m a b <> :: OneObject m a b -> OneObject m a b -> OneObject m a b $csconcat :: forall m (a :: ()) (b :: ()). Semigroup m => NonEmpty (OneObject m a b) -> OneObject m a b sconcat :: NonEmpty (OneObject m a b) -> OneObject m a b $cstimes :: forall m (a :: ()) (b :: ()) b. (Semigroup m, Integral b) => b -> OneObject m a b -> OneObject m a b stimes :: forall b. Integral b => b -> OneObject m a b -> OneObject m a b Semigroup, Semigroup (OneObject m a b) OneObject m a b Semigroup (OneObject m a b) => OneObject m a b -> (OneObject m a b -> OneObject m a b -> OneObject m a b) -> ([OneObject m a b] -> OneObject m a b) -> Monoid (OneObject m a b) [OneObject m a b] -> OneObject m a b OneObject m a b -> OneObject m a b -> OneObject m a b forall a. Semigroup a => a -> (a -> a -> a) -> ([a] -> a) -> Monoid a forall m (a :: ()) (b :: ()). Monoid m => Semigroup (OneObject m a b) forall m (a :: ()) (b :: ()). Monoid m => OneObject m a b forall m (a :: ()) (b :: ()). Monoid m => [OneObject m a b] -> OneObject m a b forall m (a :: ()) (b :: ()). Monoid m => OneObject m a b -> OneObject m a b -> OneObject m a b $cmempty :: forall m (a :: ()) (b :: ()). Monoid m => OneObject m a b mempty :: OneObject m a b $cmappend :: forall m (a :: ()) (b :: ()). Monoid m => OneObject m a b -> OneObject m a b -> OneObject m a b mappend :: OneObject m a b -> OneObject m a b -> OneObject m a b $cmconcat :: forall m (a :: ()) (b :: ()). Monoid m => [OneObject m a b] -> OneObject m a b mconcat :: [OneObject m a b] -> OneObject m a b Monoid) instance Monoid m => Category (OneObject m) where id :: forall (a :: ()). OneObject m a a id = m -> OneObject m a a forall m (a :: ()) (b :: ()). m -> OneObject m a b OneObject m forall a. Monoid a => a mempty OneObject m m1 . :: forall (b :: ()) (c :: ()) (a :: ()). OneObject m b c -> OneObject m a b -> OneObject m a c . OneObject m m2 = m -> OneObject m a c forall m (a :: ()) (b :: ()). m -> OneObject m a b OneObject (m m1 m -> m -> m forall a. Semigroup a => a -> a -> a <> m m2)