Source file comparator.ml
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
module type S = sig
type t
val compare : t -> t -> Ordering.t
end
module type OPS = sig
type t
val equal : t -> t -> bool
val ( = ) : t -> t -> bool
val ( >= ) : t -> t -> bool
val ( > ) : t -> t -> bool
val ( <= ) : t -> t -> bool
val ( < ) : t -> t -> bool
val ( <> ) : t -> t -> bool
end
module Operators (X : S) = struct
type t = X.t
let ( = ) a b =
match X.compare a b with
| Eq -> true
| Gt
| Lt ->
false
let equal = ( = )
let ( <> ) a b = not (a = b)
let ( >= ) a b =
match X.compare a b with
| Gt
| Eq ->
true
| Lt -> false
let ( > ) a b =
match X.compare a b with
| Gt -> true
| Lt
| Eq ->
false
let ( <= ) a b =
match X.compare a b with
| Lt
| Eq ->
true
| Gt -> false
let ( < ) a b =
match X.compare a b with
| Lt -> true
| Gt
| Eq ->
false
end