31 lines
536 B
OCaml
31 lines
536 B
OCaml
|
|
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
|