sig
  type 'a hobj =
    'BatHashcons.hobj = private {
    obj : 'a;
    tag : int;
    hcode : int;
  }
  type 'a t = 'a hobj
  val compare : 'a hobj -> 'a hobj -> int
  module type Table =
    sig
      type key
      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 MakeTable :
    functor (HT : BatHashtbl.HashedType->
      sig
        type key = HT.t
        type t = BatHashcons.MakeTable(HT).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 : 'a hobj -> int
      val hc1_ : int -> int -> int
      val hc1 : 'a hobj -> int -> int
    end
end