{-# LANGUAGE DerivingStrategies #-} module Data.InternalCategory.Codiscrete where import Data.InternalCategory ( IQuiver(..), ICategory(..), Path(Path) ) data Codisc a = Codisc a a deriving stock (Codisc a -> Codisc a -> Bool (Codisc a -> Codisc a -> Bool) -> (Codisc a -> Codisc a -> Bool) -> Eq (Codisc a) forall a. Eq a => Codisc a -> Codisc a -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: forall a. Eq a => Codisc a -> Codisc a -> Bool == :: Codisc a -> Codisc a -> Bool $c/= :: forall a. Eq a => Codisc a -> Codisc a -> Bool /= :: Codisc a -> Codisc a -> Bool Eq, Eq (Codisc a) Eq (Codisc a) => (Codisc a -> Codisc a -> Ordering) -> (Codisc a -> Codisc a -> Bool) -> (Codisc a -> Codisc a -> Bool) -> (Codisc a -> Codisc a -> Bool) -> (Codisc a -> Codisc a -> Bool) -> (Codisc a -> Codisc a -> Codisc a) -> (Codisc a -> Codisc a -> Codisc a) -> Ord (Codisc a) Codisc a -> Codisc a -> Bool Codisc a -> Codisc a -> Ordering Codisc a -> Codisc a -> Codisc a 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 a. Ord a => Eq (Codisc a) forall a. Ord a => Codisc a -> Codisc a -> Bool forall a. Ord a => Codisc a -> Codisc a -> Ordering forall a. Ord a => Codisc a -> Codisc a -> Codisc a $ccompare :: forall a. Ord a => Codisc a -> Codisc a -> Ordering compare :: Codisc a -> Codisc a -> Ordering $c< :: forall a. Ord a => Codisc a -> Codisc a -> Bool < :: Codisc a -> Codisc a -> Bool $c<= :: forall a. Ord a => Codisc a -> Codisc a -> Bool <= :: Codisc a -> Codisc a -> Bool $c> :: forall a. Ord a => Codisc a -> Codisc a -> Bool > :: Codisc a -> Codisc a -> Bool $c>= :: forall a. Ord a => Codisc a -> Codisc a -> Bool >= :: Codisc a -> Codisc a -> Bool $cmax :: forall a. Ord a => Codisc a -> Codisc a -> Codisc a max :: Codisc a -> Codisc a -> Codisc a $cmin :: forall a. Ord a => Codisc a -> Codisc a -> Codisc a min :: Codisc a -> Codisc a -> Codisc a Ord, Int -> Codisc a -> ShowS [Codisc a] -> ShowS Codisc a -> String (Int -> Codisc a -> ShowS) -> (Codisc a -> String) -> ([Codisc a] -> ShowS) -> Show (Codisc a) forall a. Show a => Int -> Codisc a -> ShowS forall a. Show a => [Codisc a] -> ShowS forall a. Show a => Codisc a -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: forall a. Show a => Int -> Codisc a -> ShowS showsPrec :: Int -> Codisc a -> ShowS $cshow :: forall a. Show a => Codisc a -> String show :: Codisc a -> String $cshowList :: forall a. Show a => [Codisc a] -> ShowS showList :: [Codisc a] -> ShowS Show, ReadPrec [Codisc a] ReadPrec (Codisc a) Int -> ReadS (Codisc a) ReadS [Codisc a] (Int -> ReadS (Codisc a)) -> ReadS [Codisc a] -> ReadPrec (Codisc a) -> ReadPrec [Codisc a] -> Read (Codisc a) forall a. Read a => ReadPrec [Codisc a] forall a. Read a => ReadPrec (Codisc a) forall a. Read a => Int -> ReadS (Codisc a) forall a. Read a => ReadS [Codisc a] forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a $creadsPrec :: forall a. Read a => Int -> ReadS (Codisc a) readsPrec :: Int -> ReadS (Codisc a) $creadList :: forall a. Read a => ReadS [Codisc a] readList :: ReadS [Codisc a] $creadPrec :: forall a. Read a => ReadPrec (Codisc a) readPrec :: ReadPrec (Codisc a) $creadListPrec :: forall a. Read a => ReadPrec [Codisc a] readListPrec :: ReadPrec [Codisc a] Read) instance IQuiver a (Codisc a) where src :: Codisc a -> a src (Codisc a x a _) = a x tgt :: Codisc a -> a tgt (Codisc a _ a y) = a y instance Eq a => ICategory a (Codisc a) where foldPath :: Path a (Codisc a) -> Codisc a foldPath (Path a x [Codisc a] _ a y) = a -> a -> Codisc a forall a. a -> a -> Codisc a Codisc a x a y