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
module T = struct
type t = int
let compare (a : int) b : Ordering.t = if a < b then Lt else if a = b then Eq else Gt
let to_dyn x = Dyn.Int x
end
include T
include Comparable.Make (T)
let equal (a : t) b = a = b
let[@inline always] hash (t : t) =
let t = lnot t + (t lsl 21) in
let t = t lxor (t lsr 24) in
let t = t + (t lsl 3) + (t lsl 8) in
let t = t lxor (t lsr 14) in
let t = t + (t lsl 2) + (t lsl 4) in
let t = t lxor (t lsr 28) in
t + (t lsl 31)
;;
let of_string_exn s =
match int_of_string s with
| exception Failure _ -> failwith (Printf.sprintf "of_string_exn: invalid int %S" s)
| s -> s
;;
let to_string i = string_of_int i
module Infix = Comparator.Operators (T)
let of_string s = int_of_string_opt s
let shift_left = Stdlib.Int.shift_left
let shift_right = Stdlib.Int.shift_right
let max_int = Stdlib.Int.max_int