sig
  type elt
  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
  type binable = t
  val bin_size_t : binable Bin_prot.Size.sizer
  val bin_write_t : binable Bin_prot.Map_to_safe.writer
  val bin_write_t_ : binable Bin_prot.Unsafe_write_c.writer
  val bin_read_t : binable Bin_prot.Read_ml.reader
  val bin_read_t_ : binable Bin_prot.Unsafe_read_c.reader
  val bin_read_t__ : (int -> binable) Bin_prot.Unsafe_read_c.reader
  val bin_writer_t : binable Bin_prot.Type_class.writer
  val bin_reader_t : binable Bin_prot.Type_class.reader
  val bin_t : binable Bin_prot.Type_class.t
end