sig
  type elt = hashable
  type t
  module T : sig type 'a elt = elt type 'a t = t end
  val create : int -> t
  val add : t -> elt -> unit
  val strict_add : t -> elt -> unit
  val remove : t -> elt -> unit
  val strict_remove : t -> elt -> unit
  val clear : t -> unit
  val fold : f:('-> elt -> 'a) -> init:'-> t -> 'a
  val iter : f:(elt -> unit) -> t -> unit
  val length : t -> int
  val mem : t -> elt -> bool
  val is_empty : t -> bool
  val of_list : elt list -> t
  val to_list : t -> elt list
  val equal : t -> t -> bool
  val sexp_of_t : t -> Sexplib.Sexp.t
  val t_of_sexp : Sexplib.Sexp.t -> t
end