{-# LANGUAGE CPP #-}
module Agda.Utils.PartialOrd where
import Data.Maybe
#if __GLASGOW_HASKELL__ < 804
import Data.Semigroup
#endif
import Data.Set (Set)
import qualified Data.Set as Set
data PartialOrdering
= POLT
| POLE
| POEQ
| POGE
| POGT
| POAny
deriving (PartialOrdering -> PartialOrdering -> Bool
(PartialOrdering -> PartialOrdering -> Bool)
-> (PartialOrdering -> PartialOrdering -> Bool)
-> Eq PartialOrdering
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PartialOrdering -> PartialOrdering -> Bool
$c/= :: PartialOrdering -> PartialOrdering -> Bool
== :: PartialOrdering -> PartialOrdering -> Bool
$c== :: PartialOrdering -> PartialOrdering -> Bool
Eq, Int -> PartialOrdering -> ShowS
[PartialOrdering] -> ShowS
PartialOrdering -> String
(Int -> PartialOrdering -> ShowS)
-> (PartialOrdering -> String)
-> ([PartialOrdering] -> ShowS)
-> Show PartialOrdering
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PartialOrdering] -> ShowS
$cshowList :: [PartialOrdering] -> ShowS
show :: PartialOrdering -> String
$cshow :: PartialOrdering -> String
showsPrec :: Int -> PartialOrdering -> ShowS
$cshowsPrec :: Int -> PartialOrdering -> ShowS
Show, Int -> PartialOrdering
PartialOrdering -> Int
PartialOrdering -> [PartialOrdering]
PartialOrdering -> PartialOrdering
PartialOrdering -> PartialOrdering -> [PartialOrdering]
PartialOrdering
-> PartialOrdering -> PartialOrdering -> [PartialOrdering]
(PartialOrdering -> PartialOrdering)
-> (PartialOrdering -> PartialOrdering)
-> (Int -> PartialOrdering)
-> (PartialOrdering -> Int)
-> (PartialOrdering -> [PartialOrdering])
-> (PartialOrdering -> PartialOrdering -> [PartialOrdering])
-> (PartialOrdering -> PartialOrdering -> [PartialOrdering])
-> (PartialOrdering
-> PartialOrdering -> PartialOrdering -> [PartialOrdering])
-> Enum PartialOrdering
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: PartialOrdering
-> PartialOrdering -> PartialOrdering -> [PartialOrdering]
$cenumFromThenTo :: PartialOrdering
-> PartialOrdering -> PartialOrdering -> [PartialOrdering]
enumFromTo :: PartialOrdering -> PartialOrdering -> [PartialOrdering]
$cenumFromTo :: PartialOrdering -> PartialOrdering -> [PartialOrdering]
enumFromThen :: PartialOrdering -> PartialOrdering -> [PartialOrdering]
$cenumFromThen :: PartialOrdering -> PartialOrdering -> [PartialOrdering]
enumFrom :: PartialOrdering -> [PartialOrdering]
$cenumFrom :: PartialOrdering -> [PartialOrdering]
fromEnum :: PartialOrdering -> Int
$cfromEnum :: PartialOrdering -> Int
toEnum :: Int -> PartialOrdering
$ctoEnum :: Int -> PartialOrdering
pred :: PartialOrdering -> PartialOrdering
$cpred :: PartialOrdering -> PartialOrdering
succ :: PartialOrdering -> PartialOrdering
$csucc :: PartialOrdering -> PartialOrdering
Enum, PartialOrdering
PartialOrdering -> PartialOrdering -> Bounded PartialOrdering
forall a. a -> a -> Bounded a
maxBound :: PartialOrdering
$cmaxBound :: PartialOrdering
minBound :: PartialOrdering
$cminBound :: PartialOrdering
Bounded)
leqPO :: PartialOrdering -> PartialOrdering -> Bool
leqPO :: PartialOrdering -> PartialOrdering -> Bool
leqPO _ POAny = Bool
True
leqPO POLT POLT = Bool
True
leqPO POLT POLE = Bool
True
leqPO POLE POLE = Bool
True
leqPO POEQ POLE = Bool
True
leqPO POEQ POEQ = Bool
True
leqPO POEQ POGE = Bool
True
leqPO POGE POGE = Bool
True
leqPO POGT POGT = Bool
True
leqPO POGT POGE = Bool
True
leqPO _ _ = Bool
False
oppPO :: PartialOrdering -> PartialOrdering
oppPO :: PartialOrdering -> PartialOrdering
oppPO POLT = PartialOrdering
POGT
oppPO POLE = PartialOrdering
POGE
oppPO POEQ = PartialOrdering
POEQ
oppPO POGE = PartialOrdering
POLE
oppPO POGT = PartialOrdering
POLT
oppPO POAny = PartialOrdering
POAny
orPO :: PartialOrdering -> PartialOrdering -> PartialOrdering
orPO :: PartialOrdering -> PartialOrdering -> PartialOrdering
orPO POAny _ = PartialOrdering
POAny
orPO POLT POLT = PartialOrdering
POLT
orPO POLT POLE = PartialOrdering
POLE
orPO POLT POEQ = PartialOrdering
POLE
orPO POLE POLT = PartialOrdering
POLE
orPO POLE POLE = PartialOrdering
POLE
orPO POLE POEQ = PartialOrdering
POLE
orPO POEQ POLT = PartialOrdering
POLE
orPO POEQ POLE = PartialOrdering
POLE
orPO POEQ POEQ = PartialOrdering
POEQ
orPO POEQ POGE = PartialOrdering
POGE
orPO POEQ POGT = PartialOrdering
POGE
orPO POGE POEQ = PartialOrdering
POGE
orPO POGE POGE = PartialOrdering
POGE
orPO POGE POGT = PartialOrdering
POGE
orPO POGT POEQ = PartialOrdering
POGE
orPO POGT POGE = PartialOrdering
POGE
orPO POGT POGT = PartialOrdering
POGT
orPO _ _ = PartialOrdering
POAny
seqPO :: PartialOrdering -> PartialOrdering -> PartialOrdering
seqPO :: PartialOrdering -> PartialOrdering -> PartialOrdering
seqPO POAny _ = PartialOrdering
POAny
seqPO POEQ p :: PartialOrdering
p = PartialOrdering
p
seqPO POLT POLT = PartialOrdering
POLT
seqPO POLT POLE = PartialOrdering
POLT
seqPO POLT POEQ = PartialOrdering
POLT
seqPO POLE POLT = PartialOrdering
POLT
seqPO POLE POLE = PartialOrdering
POLE
seqPO POLE POEQ = PartialOrdering
POLE
seqPO POGE POEQ = PartialOrdering
POGE
seqPO POGE POGE = PartialOrdering
POGE
seqPO POGE POGT = PartialOrdering
POGT
seqPO POGT POEQ = PartialOrdering
POGT
seqPO POGT POGE = PartialOrdering
POGT
seqPO POGT POGT = PartialOrdering
POGT
seqPO _ _ = PartialOrdering
POAny
instance Semigroup PartialOrdering where
<> :: PartialOrdering -> PartialOrdering -> PartialOrdering
(<>) = PartialOrdering -> PartialOrdering -> PartialOrdering
seqPO
instance Monoid PartialOrdering where
mempty :: PartialOrdering
mempty = PartialOrdering
POEQ
mappend :: PartialOrdering -> PartialOrdering -> PartialOrdering
mappend = PartialOrdering -> PartialOrdering -> PartialOrdering
forall a. Semigroup a => a -> a -> a
(<>)
fromOrdering :: Ordering -> PartialOrdering
fromOrdering :: Ordering -> PartialOrdering
fromOrdering LT = PartialOrdering
POLT
fromOrdering EQ = PartialOrdering
POEQ
fromOrdering GT = PartialOrdering
POGT
fromOrderings :: [Ordering] -> PartialOrdering
fromOrderings :: [Ordering] -> PartialOrdering
fromOrderings = (PartialOrdering -> PartialOrdering -> PartialOrdering)
-> [PartialOrdering] -> PartialOrdering
forall (t :: * -> *) a. Foldable t => (a -> a -> a) -> t a -> a
foldr1 PartialOrdering -> PartialOrdering -> PartialOrdering
orPO ([PartialOrdering] -> PartialOrdering)
-> ([Ordering] -> [PartialOrdering])
-> [Ordering]
-> PartialOrdering
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Ordering -> PartialOrdering) -> [Ordering] -> [PartialOrdering]
forall a b. (a -> b) -> [a] -> [b]
map Ordering -> PartialOrdering
fromOrdering
toOrderings :: PartialOrdering -> [Ordering]
toOrderings :: PartialOrdering -> [Ordering]
toOrderings POLT = [Ordering
LT]
toOrderings POLE = [Ordering
LT, Ordering
EQ]
toOrderings POEQ = [Ordering
EQ]
toOrderings POGE = [Ordering
EQ, Ordering
GT]
toOrderings POGT = [Ordering
GT]
toOrderings POAny = [Ordering
LT, Ordering
EQ, Ordering
GT]
type Comparable a = a -> a -> PartialOrdering
class PartialOrd a where
comparable :: Comparable a
comparableOrd :: Ord a => Comparable a
comparableOrd :: Comparable a
comparableOrd x :: a
x y :: a
y = Ordering -> PartialOrdering
fromOrdering (Ordering -> PartialOrdering) -> Ordering -> PartialOrdering
forall a b. (a -> b) -> a -> b
$ a -> a -> Ordering
forall a. Ord a => a -> a -> Ordering
compare a
x a
y
related :: PartialOrd a => a -> PartialOrdering -> a -> Bool
related :: a -> PartialOrdering -> a -> Bool
related a :: a
a o :: PartialOrdering
o b :: a
b = Comparable a
forall a. PartialOrd a => Comparable a
comparable a
a a
b PartialOrdering -> PartialOrdering -> Bool
`leqPO` PartialOrdering
o
instance PartialOrd Int where
comparable :: Comparable Int
comparable = Comparable Int
forall a. Ord a => Comparable a
comparableOrd
instance PartialOrd Integer where
comparable :: Comparable Integer
comparable = Comparable Integer
forall a. Ord a => Comparable a
comparableOrd
instance PartialOrd () where
comparable :: Comparable ()
comparable _ _ = PartialOrdering
POEQ
instance PartialOrd a => PartialOrd (Maybe a) where
comparable :: Comparable (Maybe a)
comparable mx :: Maybe a
mx my :: Maybe a
my = case (Maybe a
mx, Maybe a
my) of
(Nothing, Nothing) -> PartialOrdering
POEQ
(Nothing, Just{} ) -> PartialOrdering
POAny
(Just{} , Nothing) -> PartialOrdering
POAny
(Just x :: a
x , Just y :: a
y ) -> Comparable a
forall a. PartialOrd a => Comparable a
comparable a
x a
y
instance (PartialOrd a, PartialOrd b) => PartialOrd (Either a b) where
comparable :: Comparable (Either a b)
comparable mx :: Either a b
mx my :: Either a b
my = case (Either a b
mx, Either a b
my) of
(Left x :: a
x, Left y :: a
y) -> Comparable a
forall a. PartialOrd a => Comparable a
comparable a
x a
y
(Left _, Right _) -> PartialOrdering
POAny
(Right _, Left _) -> PartialOrdering
POAny
(Right x :: b
x, Right y :: b
y) -> Comparable b
forall a. PartialOrd a => Comparable a
comparable b
x b
y
instance (PartialOrd a, PartialOrd b) => PartialOrd (a, b) where
comparable :: Comparable (a, b)
comparable (x1 :: a
x1, x2 :: b
x2) (y1 :: a
y1, y2 :: b
y2) =
Comparable a
forall a. PartialOrd a => Comparable a
comparable a
x1 a
y1 PartialOrdering -> PartialOrdering -> PartialOrdering
`orPO`
Comparable b
forall a. PartialOrd a => Comparable a
comparable b
x2 b
y2
newtype Pointwise a = Pointwise { Pointwise a -> a
pointwise :: a }
deriving (Pointwise a -> Pointwise a -> Bool
(Pointwise a -> Pointwise a -> Bool)
-> (Pointwise a -> Pointwise a -> Bool) -> Eq (Pointwise a)
forall a. Eq a => Pointwise a -> Pointwise a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Pointwise a -> Pointwise a -> Bool
$c/= :: forall a. Eq a => Pointwise a -> Pointwise a -> Bool
== :: Pointwise a -> Pointwise a -> Bool
$c== :: forall a. Eq a => Pointwise a -> Pointwise a -> Bool
Eq, Int -> Pointwise a -> ShowS
[Pointwise a] -> ShowS
Pointwise a -> String
(Int -> Pointwise a -> ShowS)
-> (Pointwise a -> String)
-> ([Pointwise a] -> ShowS)
-> Show (Pointwise a)
forall a. Show a => Int -> Pointwise a -> ShowS
forall a. Show a => [Pointwise a] -> ShowS
forall a. Show a => Pointwise a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Pointwise a] -> ShowS
$cshowList :: forall a. Show a => [Pointwise a] -> ShowS
show :: Pointwise a -> String
$cshow :: forall a. Show a => Pointwise a -> String
showsPrec :: Int -> Pointwise a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Pointwise a -> ShowS
Show, a -> Pointwise b -> Pointwise a
(a -> b) -> Pointwise a -> Pointwise b
(forall a b. (a -> b) -> Pointwise a -> Pointwise b)
-> (forall a b. a -> Pointwise b -> Pointwise a)
-> Functor Pointwise
forall a b. a -> Pointwise b -> Pointwise a
forall a b. (a -> b) -> Pointwise a -> Pointwise b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> Pointwise b -> Pointwise a
$c<$ :: forall a b. a -> Pointwise b -> Pointwise a
fmap :: (a -> b) -> Pointwise a -> Pointwise b
$cfmap :: forall a b. (a -> b) -> Pointwise a -> Pointwise b
Functor)
instance PartialOrd a => PartialOrd (Pointwise [a]) where
comparable :: Comparable (Pointwise [a])
comparable (Pointwise xs :: [a]
xs) (Pointwise ys :: [a]
ys) = Maybe PartialOrdering -> [a] -> [a] -> PartialOrdering
forall a.
PartialOrd a =>
Maybe PartialOrdering -> [a] -> [a] -> PartialOrdering
loop Maybe PartialOrdering
forall a. Maybe a
Nothing [a]
xs [a]
ys
where
loop :: Maybe PartialOrdering -> [a] -> [a] -> PartialOrdering
loop mo :: Maybe PartialOrdering
mo [] [] = PartialOrdering -> Maybe PartialOrdering -> PartialOrdering
forall a. a -> Maybe a -> a
fromMaybe PartialOrdering
POEQ Maybe PartialOrdering
mo
loop _ [] ys :: [a]
ys = PartialOrdering
POAny
loop _ xs :: [a]
xs [] = PartialOrdering
POAny
loop mo :: Maybe PartialOrdering
mo (x :: a
x:xs :: [a]
xs) (y :: a
y:ys :: [a]
ys) =
let o :: PartialOrdering
o = Comparable a
forall a. PartialOrd a => Comparable a
comparable a
x a
y in
case PartialOrdering
-> (PartialOrdering -> PartialOrdering)
-> Maybe PartialOrdering
-> PartialOrdering
forall b a. b -> (a -> b) -> Maybe a -> b
maybe PartialOrdering
o (PartialOrdering -> PartialOrdering -> PartialOrdering
orPO PartialOrdering
o) Maybe PartialOrdering
mo of
POAny -> PartialOrdering
POAny
o :: PartialOrdering
o -> Maybe PartialOrdering -> [a] -> [a] -> PartialOrdering
loop (PartialOrdering -> Maybe PartialOrdering
forall a. a -> Maybe a
Just PartialOrdering
o) [a]
xs [a]
ys
newtype Inclusion a = Inclusion { Inclusion a -> a
inclusion :: a }
deriving (Inclusion a -> Inclusion a -> Bool
(Inclusion a -> Inclusion a -> Bool)
-> (Inclusion a -> Inclusion a -> Bool) -> Eq (Inclusion a)
forall a. Eq a => Inclusion a -> Inclusion a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Inclusion a -> Inclusion a -> Bool
$c/= :: forall a. Eq a => Inclusion a -> Inclusion a -> Bool
== :: Inclusion a -> Inclusion a -> Bool
$c== :: forall a. Eq a => Inclusion a -> Inclusion a -> Bool
Eq, Eq (Inclusion a)
Eq (Inclusion a) =>
(Inclusion a -> Inclusion a -> Ordering)
-> (Inclusion a -> Inclusion a -> Bool)
-> (Inclusion a -> Inclusion a -> Bool)
-> (Inclusion a -> Inclusion a -> Bool)
-> (Inclusion a -> Inclusion a -> Bool)
-> (Inclusion a -> Inclusion a -> Inclusion a)
-> (Inclusion a -> Inclusion a -> Inclusion a)
-> Ord (Inclusion a)
Inclusion a -> Inclusion a -> Bool
Inclusion a -> Inclusion a -> Ordering
Inclusion a -> Inclusion a -> Inclusion 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 (Inclusion a)
forall a. Ord a => Inclusion a -> Inclusion a -> Bool
forall a. Ord a => Inclusion a -> Inclusion a -> Ordering
forall a. Ord a => Inclusion a -> Inclusion a -> Inclusion a
min :: Inclusion a -> Inclusion a -> Inclusion a
$cmin :: forall a. Ord a => Inclusion a -> Inclusion a -> Inclusion a
max :: Inclusion a -> Inclusion a -> Inclusion a
$cmax :: forall a. Ord a => Inclusion a -> Inclusion a -> Inclusion a
>= :: Inclusion a -> Inclusion a -> Bool
$c>= :: forall a. Ord a => Inclusion a -> Inclusion a -> Bool
> :: Inclusion a -> Inclusion a -> Bool
$c> :: forall a. Ord a => Inclusion a -> Inclusion a -> Bool
<= :: Inclusion a -> Inclusion a -> Bool
$c<= :: forall a. Ord a => Inclusion a -> Inclusion a -> Bool
< :: Inclusion a -> Inclusion a -> Bool
$c< :: forall a. Ord a => Inclusion a -> Inclusion a -> Bool
compare :: Inclusion a -> Inclusion a -> Ordering
$ccompare :: forall a. Ord a => Inclusion a -> Inclusion a -> Ordering
$cp1Ord :: forall a. Ord a => Eq (Inclusion a)
Ord, Int -> Inclusion a -> ShowS
[Inclusion a] -> ShowS
Inclusion a -> String
(Int -> Inclusion a -> ShowS)
-> (Inclusion a -> String)
-> ([Inclusion a] -> ShowS)
-> Show (Inclusion a)
forall a. Show a => Int -> Inclusion a -> ShowS
forall a. Show a => [Inclusion a] -> ShowS
forall a. Show a => Inclusion a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Inclusion a] -> ShowS
$cshowList :: forall a. Show a => [Inclusion a] -> ShowS
show :: Inclusion a -> String
$cshow :: forall a. Show a => Inclusion a -> String
showsPrec :: Int -> Inclusion a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Inclusion a -> ShowS
Show, a -> Inclusion b -> Inclusion a
(a -> b) -> Inclusion a -> Inclusion b
(forall a b. (a -> b) -> Inclusion a -> Inclusion b)
-> (forall a b. a -> Inclusion b -> Inclusion a)
-> Functor Inclusion
forall a b. a -> Inclusion b -> Inclusion a
forall a b. (a -> b) -> Inclusion a -> Inclusion b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> Inclusion b -> Inclusion a
$c<$ :: forall a b. a -> Inclusion b -> Inclusion a
fmap :: (a -> b) -> Inclusion a -> Inclusion b
$cfmap :: forall a b. (a -> b) -> Inclusion a -> Inclusion b
Functor)
instance (Ord a) => PartialOrd (Inclusion [a]) where
comparable :: Comparable (Inclusion [a])
comparable (Inclusion xs :: [a]
xs) (Inclusion ys :: [a]
ys) = PartialOrdering -> [a] -> [a] -> PartialOrdering
forall a. Ord a => PartialOrdering -> [a] -> [a] -> PartialOrdering
merge PartialOrdering
POEQ [a]
xs [a]
ys
where
merge' :: PartialOrdering -> [a] -> [a] -> PartialOrdering
merge' POAny xs :: [a]
xs ys :: [a]
ys = PartialOrdering
POAny
merge' o :: PartialOrdering
o xs :: [a]
xs ys :: [a]
ys = PartialOrdering -> [a] -> [a] -> PartialOrdering
merge PartialOrdering
o [a]
xs [a]
ys
merge :: PartialOrdering -> [a] -> [a] -> PartialOrdering
merge o :: PartialOrdering
o [] [] = PartialOrdering
o
merge o :: PartialOrdering
o [] ys :: [a]
ys = PartialOrdering -> PartialOrdering -> PartialOrdering
forall a. Monoid a => a -> a -> a
mappend PartialOrdering
o PartialOrdering
POLT
merge o :: PartialOrdering
o xs :: [a]
xs [] = PartialOrdering -> PartialOrdering -> PartialOrdering
forall a. Monoid a => a -> a -> a
mappend PartialOrdering
o PartialOrdering
POGT
merge o :: PartialOrdering
o xs :: [a]
xs@(x :: a
x:xs' :: [a]
xs') ys :: [a]
ys@(y :: a
y:ys' :: [a]
ys') =
case a -> a -> Ordering
forall a. Ord a => a -> a -> Ordering
compare a
x a
y of
LT -> PartialOrdering -> [a] -> [a] -> PartialOrdering
merge' (PartialOrdering -> PartialOrdering -> PartialOrdering
forall a. Monoid a => a -> a -> a
mappend PartialOrdering
o PartialOrdering
POGT) [a]
xs' [a]
ys
EQ -> PartialOrdering -> [a] -> [a] -> PartialOrdering
merge PartialOrdering
o [a]
xs' [a]
ys'
GT -> PartialOrdering -> [a] -> [a] -> PartialOrdering
merge' (PartialOrdering -> PartialOrdering -> PartialOrdering
forall a. Monoid a => a -> a -> a
mappend PartialOrdering
o PartialOrdering
POLT) [a]
xs [a]
ys'
instance Ord a => PartialOrd (Inclusion (Set a)) where
comparable :: Comparable (Inclusion (Set a))
comparable s :: Inclusion (Set a)
s t :: Inclusion (Set a)
t = Comparable (Inclusion [a])
forall a. PartialOrd a => Comparable a
comparable (Set a -> [a]
forall a. Set a -> [a]
Set.toAscList (Set a -> [a]) -> Inclusion (Set a) -> Inclusion [a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Inclusion (Set a)
s) (Set a -> [a]
forall a. Set a -> [a]
Set.toAscList (Set a -> [a]) -> Inclusion (Set a) -> Inclusion [a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Inclusion (Set a)
t)
instance PartialOrd PartialOrdering where
comparable :: PartialOrdering -> PartialOrdering -> PartialOrdering
comparable POAny POAny = PartialOrdering
POEQ
comparable POAny _ = PartialOrdering
POGT
comparable _ POAny = PartialOrdering
POLT
comparable POLE POLE = PartialOrdering
POEQ
comparable POLE POLT = PartialOrdering
POGT
comparable POLE POEQ = PartialOrdering
POGT
comparable POGE POGE = PartialOrdering
POEQ
comparable POGE POGT = PartialOrdering
POGT
comparable POGE POEQ = PartialOrdering
POGT
comparable POLT POLT = PartialOrdering
POEQ
comparable POLT POLE = PartialOrdering
POLT
comparable POEQ POEQ = PartialOrdering
POEQ
comparable POEQ POLE = PartialOrdering
POLT
comparable POEQ POGE = PartialOrdering
POLT
comparable POGT POGT = PartialOrdering
POEQ
comparable POGT POGE = PartialOrdering
POLT
comparable _ _ = PartialOrdering
POAny