`sig type 'a hobj = private { obj : 'a; tag : int; hcode : int; } type 'a t = 'a BatHashcons.hobj val compare : 'a BatHashcons.hobj -> 'a BatHashcons.hobj -> int module type Table = sig type key type t val create : int -> BatHashcons.Table.t val clear : BatHashcons.Table.t -> unit val hashcons : BatHashcons.Table.t -> BatHashcons.Table.key -> BatHashcons.Table.key BatHashcons.hobj val iter : (BatHashcons.Table.key BatHashcons.hobj -> unit) -> BatHashcons.Table.t -> unit val fold : (BatHashcons.Table.key BatHashcons.hobj -> 'a -> 'a) -> BatHashcons.Table.t -> 'a -> 'a val count : BatHashcons.Table.t -> int end module MakeTable : functor (HT : BatHashtbl.HashedType) -> sig type key = HT.t type t val create : int -> t val clear : t -> unit val hashcons : t -> key -> key hobj val iter : (key hobj -> unit) -> t -> unit val fold : (key hobj -> 'a -> 'a) -> t -> 'a -> 'a val count : t -> int end module H : sig val hc0_ : int -> int val hc0 : 'a BatHashcons.hobj -> int val hc1_ : int -> int -> int val hc1 : 'a BatHashcons.hobj -> int -> int end end`