functor (E : ELEMENT->
  sig
    type t
    type elt = E.t
    val create : int -> t
    val singleton : elt -> t
    val clear : t -> unit
    val copy : t -> t
    val copy_into : into:t -> t -> unit
    val insert : t -> elt -> unit
    val remove : t -> elt -> unit
    val cardinal : t -> int
    val mem : t -> elt -> bool
    val find_exn : t -> elt -> elt
    val find : t -> elt -> elt option
    val inter : t -> t -> t
    val inter_mut : into:t -> t -> unit
    val union : t -> t -> t
    val union_mut : into:t -> t -> unit
    val diff : t -> t -> t
    val subset : t -> t -> bool
    val equal : t -> t -> bool
    val for_all : (elt -> bool) -> t -> bool
    val exists : (elt -> bool) -> t -> bool
    val iter : (elt -> unit) -> t -> unit
    val fold : ('-> elt -> 'a) -> '-> t -> 'a
    val elements : t -> elt list
    val of_list : elt list -> t
    val to_seq : t -> elt sequence
    val of_seq : elt sequence -> t
    val add_seq : t -> elt sequence -> unit
    val pp : ?sep:string -> elt printer -> t printer
  end