0 | module Data.Trichotomy
12 | data Trichotomy : (lt : a -> a -> Type) -> (a -> a -> Type) where
13 | LT : {0 lt : a -> a -> Type}
15 | -> (0 _ : Not (v === w))
16 | -> (0 _ : Not (lt w v))
17 | -> Trichotomy lt v w
19 | EQ : {0 lt : a -> a -> Type}
20 | -> (0 _ : Not (lt v w))
22 | -> (0 _ : Not (lt w v))
23 | -> Trichotomy lt v w
25 | GT : {0 lt : a -> a -> Type}
26 | -> (0 _ : Not (lt v w))
27 | -> (0 _ : Not (v === w))
29 | -> Trichotomy lt v w
32 | Eq (Trichotomy lt m n) where
33 | LT _ _ _ == LT _ _ _ = True
34 | EQ _ _ _ == EQ _ _ _ = True
35 | GT _ _ _ == GT _ _ _ = True
39 | Ord (Trichotomy lt m n) where
40 | compare (LT _ _ _) (LT _ _ _) = EQ
41 | compare (LT _ _ _) _ = LT
42 | compare _ (LT _ _ _) = GT
43 | compare (EQ _ _ _) (EQ _ _ _) = EQ
44 | compare (EQ _ _ _) _ = LT
45 | compare _ (EQ _ _ _) = GT
46 | compare (GT _ _ _) (GT _ _ _) = EQ
49 | Show (Trichotomy lt m n) where
50 | show (LT _ _ _) = "LT"
51 | show (EQ _ _ _) = "EQ"
52 | show (GT _ _ _) = "GT"
55 | toOrdering : Trichotomy lt m n -> Ordering
56 | toOrdering (LT _ _ _) = LT
57 | toOrdering (EQ _ _ _) = EQ
58 | toOrdering (GT _ _ _) = GT