# Module type Core_set_intf.Accessors_generic

    module type Accessors_generic = sig .. end

    include Container.Generic_phantom

    type ('a, 'cmp) tree

    type ('a, 'cmp, 'z) options

The `options` type is used to make `Accessors_generic` flexible as to whether a comparator is required to be passed to certain functions.

    type 'cmp cmp

    val invariants : ('a, 'cmp, ('a, 'cmp) t -> bool) options

    val mem : ('a, 'cmp, ('a, 'cmp) t -> 'a elt -> bool)
           options

override `Container`'s `mem`

    val add : ('a, 'cmp, ('a, 'cmp) t -> 'a elt -> ('a, 'cmp) t)
           options

    val remove : ('a, 'cmp, ('a, 'cmp) t -> 'a elt -> ('a, 'cmp) t)
           options

    val union : ('a, 'cmp, ('a, 'cmp) t -> ('a, 'cmp) t -> ('a, 'cmp) t)
           options

    val inter : ('a, 'cmp, ('a, 'cmp) t -> ('a, 'cmp) t -> ('a, 'cmp) t)
           options

    val diff : ('a, 'cmp, ('a, 'cmp) t -> ('a, 'cmp) t -> ('a, 'cmp) t)
           options

    val symmetric_diff : ('a, 'cmp,
            ('a, 'cmp) t -> ('a, 'cmp) t -> ('a elt, 'a elt) Either.t Sequence.t)
           options

    val compare_direct : ('a, 'cmp, ('a, 'cmp) t -> ('a, 'cmp) t -> int)
           options

    val equal : ('a, 'cmp, ('a, 'cmp) t -> ('a, 'cmp) t -> bool)
           options

    val subset : ('a, 'cmp, ('a, 'cmp) t -> ('a, 'cmp) t -> bool)
           options

    val fold_until : ('a, 'c) t ->
           init:'b -> f:('b -> 'a elt -> [ `Continue of 'b | `Stop of 'b ]) -> 'b

    val fold_right : ('a, 'c) t -> init:'b -> f:('a elt -> 'b -> 'b) -> 'b

    val iter2 : ('a, 'cmp,
            ('a, 'cmp) t ->
            ('a, 'cmp) t ->
            f:([ `Both of 'a elt * 'a elt | `Left of 'a elt | `Right of 'a elt ] -> unit) ->
            unit)
           options

    val filter : ('a, 'cmp, ('a, 'cmp) t -> f:('a elt -> bool) -> ('a, 'cmp) t)
           options

    val partition_tf : ('a, 'cmp, ('a, 'cmp) t -> f:('a elt -> bool) -> ('a, 'cmp) t * ('a, 'cmp) t)
           options

    val elements : ('a, 'b) t -> 'a elt list

    val min_elt : ('a, 'b) t -> 'a elt option

    val min_elt_exn : ('a, 'b) t -> 'a elt

    val max_elt : ('a, 'b) t -> 'a elt option

    val max_elt_exn : ('a, 'b) t -> 'a elt

    val choose : ('a, 'b) t -> 'a elt option

    val choose_exn : ('a, 'b) t -> 'a elt

    val split : ('a, 'cmp,
            ('a, 'cmp) t -> 'a elt -> ('a, 'cmp) t * 'a elt option * ('a, 'cmp) t)
           options

    val group_by : ('a, 'cmp,
            ('a, 'cmp) t -> equiv:('a elt -> 'a elt -> bool) -> ('a, 'cmp) t list)
           options

    val find_exn : ('a, 'b) t -> f:('a elt -> bool) -> 'a elt

    val find_index : ('a, 'b) t -> int -> 'a elt option

    val remove_index : ('a, 'cmp, ('a, 'cmp) t -> int -> ('a, 'cmp) t)
           options

    val to_tree : ('a, 'cmp) t -> ('a elt, 'cmp) tree

    val to_sequence : ('a, 'cmp,
            ?order:[ `Decreasing | `Increasing ] ->
            ?greater_or_equal_to:'a elt ->
            ?less_or_equal_to:'a elt -> ('a, 'cmp) t -> 'a elt Sequence.t)
           options

    val to_map : ('a, 'cmp,
            ('a, 'cmp) t ->
            f:('a elt -> 'b) ->
            ('a elt, 'b, 'cmp cmp) Map.t)
           options