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