1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
let under f compare x y =
compare (f x) (f y)
let cascade compare0 compare1 x y =
match compare0 x y with
| 0 -> compare1 x y
| i -> i
let option compare x y =
match x, y with
| None, Some _ -> -1
| Some _, None -> 1
| None, None -> 0
| Some x, Some y -> compare x y
let sort_map f compare xs =
List.sort compare @@ List.map f xs
let invert compare x y = 0 - compare x y