sig   type 'a hobj = private { obj : 'a; tag : int; hcode : int; }   type 'a t = 'BatHashcons.hobj   val compare : 'BatHashcons.hobj -> '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) ->         BatHashcons.Table.t -> '-> '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) -> t -> '-> 'a         val count : t -> int       end   module H :     sig       val hc0_ : int -> int       val hc0 : 'BatHashcons.hobj -> int       val hc1_ : int -> int -> int       val hc1 : 'BatHashcons.hobj -> int -> int     end end