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
67
68
69
70
71
module Poly = struct
external ( < ) : 'a -> 'a -> bool = "%lessthan"
external ( <= ) : 'a -> 'a -> bool = "%lessequal"
external ( <> ) : 'a -> 'a -> bool = "%notequal"
external ( = ) : 'a -> 'a -> bool = "%equal"
external ( > ) : 'a -> 'a -> bool = "%greaterthan"
external ( >= ) : 'a -> 'a -> bool = "%greaterequal"
external compare : 'a -> 'a -> int = "%compare"
external equal : 'a -> 'a -> bool = "%equal"
end
module Int_replace_polymorphic_compare = struct
let ( < ) (x : int) y = x < y
let ( <= ) (x : int) y = x <= y
let ( <> ) (x : int) y = x <> y
let ( = ) (x : int) y = x = y
let ( > ) (x : int) y = x > y
let ( >= ) (x : int) y = x >= y
let compare (x : int) y = compare x y
let equal (x : int) y = x = y
let max (x : int) y = if x >= y then x else y
let min (x : int) y = if x <= y then x else y
end
module String = struct
include String
let equal (x : string) (y : string) = Poly.equal x y
end
module Char = struct
include Char
let equal (x : char) (y : char) = Poly.equal x y
end
include Int_replace_polymorphic_compare