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
module type S = sig
type t [@@immediate]
include Comparable_intf.S with type key := t
module Table : Hashtbl.S with type key = t
val gen : unit -> t
val peek : unit -> t
val to_int : t -> int
val compare : t -> t -> Ordering.t
val equal : t -> t -> bool
val hash : t -> int
val to_dyn : t -> Dyn.t
end
module Make () : S = struct
include Int
module Table = Hashtbl.Make (Int)
let next = ref 0
let gen () =
let v = !next in
next := v + 1;
v
;;
let peek () = !next
let to_int x = x
end