functor
  (Bound : sig
             type t
             val ( >= ) : t -> t -> bool
             val ( <= ) : t -> t -> bool
             val ( = ) : t -> t -> bool
             val ( > ) : t -> t -> bool
             val ( < ) : t -> t -> bool
             val ( <> ) : t -> t -> bool
             val equal : t -> t -> bool
             val compare : t -> t -> int
             val min : t -> t -> t
             val max : t -> t -> t
             val ascending : t -> t -> int
             val descending : t -> t -> int
             val between : t -> low:t -> high:t -> bool
             module Replace_polymorphic_compare :
               sig
                 val ( >= ) : t -> t -> bool
                 val ( <= ) : t -> t -> bool
                 val ( = ) : t -> t -> bool
                 val ( > ) : t -> t -> bool
                 val ( < ) : t -> t -> bool
                 val ( <> ) : t -> t -> bool
                 val equal : t -> t -> bool
                 val compare : t -> t -> int
                 val min : t -> t -> t
                 val max : t -> t -> t
                 val _squelch_unused_module_warning_ : unit
               end
             type comparator
             val comparator : (t, comparator) Comparator.t
             module Map :
               sig
                 module Key :
                   sig
                     type t = t
                     val compare : t -> t -> int
                     val t_of_sexp : Sexplib.Sexp.t -> t
                     val sexp_of_t : t -> Sexplib.Sexp.t
                     type comparator = comparator
                     val comparator : (t, comparator) Comparator.t_
                   end
                 type ('a, 'b, 'c) map = ('a, 'b, 'c) Map.t
                 type ('a, 'b, 'c) tree = ('a, 'b, 'c) Map.tree
                 type 'v t = (Key.t, 'v, Key.comparator) map
                 type ('k, 'v, 'comparator) t_ = 'v t
                 type 'a key_ = Key.t
                 type ('a, 'b, 'c) options =
                     ('a, 'b, 'c) Core_map_intf.without_comparator
                 val empty :
                   ('k, 'comparator, ('k, 'a, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val singleton :
                   ('k, 'comparator,
                    'k key_ -> '-> ('k, 'v, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val of_sorted_array :
                   ('k, 'comparator,
                    ('k key_ * 'v) array ->
                    ('k, 'v, 'comparator) t_ Or_error.t)
                   Core_map_intf.without_comparator
                 val of_sorted_array_unchecked :
                   ('k, 'comparator,
                    ('k key_ * 'v) array -> ('k, 'v, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val of_alist :
                   ('k, 'comparator,
                    ('k key_ * 'v) list ->
                    [ `Duplicate_key of 'k key_
                    | `Ok of ('k, 'v, 'comparator) t_ ])
                   Core_map_intf.without_comparator
                 val of_alist_exn :
                   ('k, 'comparator,
                    ('k key_ * 'v) list -> ('k, 'v, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val of_alist_multi :
                   ('k, 'comparator,
                    ('k key_ * 'v) list -> ('k, 'v list, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val of_alist_fold :
                   ('k, 'comparator,
                    ('k key_ * 'v1) list ->
                    init:'v2 ->
                    f:('v2 -> 'v1 -> 'v2) -> ('k, 'v2, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val of_tree :
                   ('k, 'comparator,
                    ('k key_, 'v, 'comparator) tree ->
                    ('k, 'v, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val invariants :
                   ('k, 'comparator, ('k, 'v, 'comparator) t_ -> bool)
                   Core_map_intf.without_comparator
                 val is_empty : ('a, 'b, 'c) t_ -> bool
                 val length : ('a, 'b, 'c) t_ -> int
                 val add :
                   ('k, 'comparator,
                    ('k, 'v, 'comparator) t_ ->
                    key:'k key_ -> data:'-> ('k, 'v, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val add_multi :
                   ('k, 'comparator,
                    ('k, 'v list, 'comparator) t_ ->
                    key:'k key_ -> data:'-> ('k, 'v list, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val change :
                   ('k, 'comparator,
                    ('k, 'v, 'comparator) t_ ->
                    'k key_ ->
                    ('v option -> 'v option) -> ('k, 'v, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val find :
                   ('k, 'comparator,
                    ('k, 'v, 'comparator) t_ -> 'k key_ -> 'v option)
                   Core_map_intf.without_comparator
                 val find_exn :
                   ('k, 'comparator,
                    ('k, 'v, 'comparator) t_ -> 'k key_ -> 'v)
                   Core_map_intf.without_comparator
                 val remove :
                   ('k, 'comparator,
                    ('k, 'v, 'comparator) t_ ->
                    'k key_ -> ('k, 'v, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val mem :
                   ('k, 'comparator,
                    ('k, 'a, 'comparator) t_ -> 'k key_ -> bool)
                   Core_map_intf.without_comparator
                 val iter :
                   ('k, 'v, 'a) t_ ->
                   f:(key:'k key_ -> data:'-> unit) -> unit
                 val iter2 :
                   ('k, 'comparator,
                    ('k, 'v1, 'comparator) t_ ->
                    ('k, 'v2, 'comparator) t_ ->
                    f:(key:'k key_ ->
                       data:[ `Both of 'v1 * 'v2
                            | `Left of 'v1
                            | `Right of 'v2 ] ->
                       unit) ->
                    unit)
                   Core_map_intf.without_comparator
                 val map :
                   ('k, 'v1, 'comparator) t_ ->
                   f:('v1 -> 'v2) -> ('k, 'v2, 'comparator) t_
                 val mapi :
                   ('k, 'v1, 'comparator) t_ ->
                   f:(key:'k key_ -> data:'v1 -> 'v2) ->
                   ('k, 'v2, 'comparator) t_
                 val fold :
                   ('k, 'v, 'b) t_ ->
                   init:'-> f:(key:'k key_ -> data:'-> '-> 'a) -> 'a
                 val fold_right :
                   ('k, 'v, 'b) t_ ->
                   init:'-> f:(key:'k key_ -> data:'-> '-> 'a) -> 'a
                 val filter :
                   ('k, 'comparator,
                    ('k, 'v, 'comparator) t_ ->
                    f:(key:'k key_ -> data:'-> bool) ->
                    ('k, 'v, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val filter_map :
                   ('k, 'comparator,
                    ('k, 'v1, 'comparator) t_ ->
                    f:('v1 -> 'v2 option) -> ('k, 'v2, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val filter_mapi :
                   ('k, 'comparator,
                    ('k, 'v1, 'comparator) t_ ->
                    f:(key:'k key_ -> data:'v1 -> 'v2 option) ->
                    ('k, 'v2, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val compare_direct :
                   ('k, 'comparator,
                    ('-> '-> int) ->
                    ('k, 'v, 'comparator) t_ ->
                    ('k, 'v, 'comparator) t_ -> int)
                   Core_map_intf.without_comparator
                 val equal :
                   ('k, 'comparator,
                    ('-> '-> bool) ->
                    ('k, 'v, 'comparator) t_ ->
                    ('k, 'v, 'comparator) t_ -> bool)
                   Core_map_intf.without_comparator
                 val keys : ('k, 'a, 'b) t_ -> 'k key_ list
                 val data : ('a, 'v, 'b) t_ -> 'v list
                 val to_alist : ('k, 'v, 'a) t_ -> ('k key_ * 'v) list
                 val merge :
                   ('k, 'comparator,
                    ('k, 'v1, 'comparator) t_ ->
                    ('k, 'v2, 'comparator) t_ ->
                    f:(key:'k key_ ->
                       [ `Both of 'v1 * 'v2 | `Left of 'v1 | `Right of 'v2 ] ->
                       'v3 option) ->
                    ('k, 'v3, 'comparator) t_)
                   Core_map_intf.without_comparator
                 val symmetric_diff :
                   ('k, 'comparator,
                    ('k, 'v, 'comparator) t_ ->
                    ('k, 'v, 'comparator) t_ ->
                    data_equal:('-> '-> bool) ->
                    ('k key_ *
                     [ `Left of '| `Right of '| `Unequal of 'v * 'v ])
                    list)
                   Core_map_intf.without_comparator
                 val min_elt : ('k, 'v, 'a) t_ -> ('k key_ * 'v) option
                 val min_elt_exn : ('k, 'v, 'a) t_ -> 'k key_ * 'v
                 val max_elt : ('k, 'v, 'a) t_ -> ('k key_ * 'v) option
                 val max_elt_exn : ('k, 'v, 'a) t_ -> 'k key_ * 'v
                 val for_all : ('k, 'v, 'a) t_ -> f:('-> bool) -> bool
                 val exists : ('k, 'v, 'a) t_ -> f:('-> bool) -> bool
                 val fold_range_inclusive :
                   ('k, 'comparator,
                    ('k, 'v, 'comparator) t_ ->
                    min:'k key_ ->
                    max:'k key_ ->
                    init:'-> f:(key:'k key_ -> data:'-> '-> 'a) -> 'a)
                   Core_map_intf.without_comparator
                 val range_to_alist :
                   ('k, 'comparator,
                    ('k, 'v, 'comparator) t_ ->
                    min:'k key_ -> max:'k key_ -> ('k key_ * 'v) list)
                   Core_map_intf.without_comparator
                 val prev_key :
                   ('k, 'comparator,
                    ('k, 'v, 'comparator) t_ ->
                    'k key_ -> ('k key_ * 'v) option)
                   Core_map_intf.without_comparator
                 val next_key :
                   ('k, 'comparator,
                    ('k, 'v, 'comparator) t_ ->
                    'k key_ -> ('k key_ * 'v) option)
                   Core_map_intf.without_comparator
                 val rank :
                   ('k, 'comparator,
                    ('k, 'v, 'comparator) t_ -> 'k key_ -> int option)
                   Core_map_intf.without_comparator
                 val to_tree :
                   ('k, 'v, 'comparator) t_ ->
                   ('k key_, 'v, 'comparator) tree
                 module Tree :
                   sig
                     type 'v t = (Key.t, 'v, Key.comparator) tree
                     type ('k, 'v, 'c) t_ = 'v t
                     val empty :
                       ('k, 'comparator, ('k, 'a, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val singleton :
                       ('k, 'comparator,
                        'k key_ -> '-> ('k, 'v, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val of_sorted_array :
                       ('k, 'comparator,
                        ('k key_ * 'v) array ->
                        ('k, 'v, 'comparator) t_ Or_error.t)
                       Core_map_intf.without_comparator
                     val of_sorted_array_unchecked :
                       ('k, 'comparator,
                        ('k key_ * 'v) array -> ('k, 'v, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val of_alist :
                       ('k, 'comparator,
                        ('k key_ * 'v) list ->
                        [ `Duplicate_key of 'k key_
                        | `Ok of ('k, 'v, 'comparator) t_ ])
                       Core_map_intf.without_comparator
                     val of_alist_exn :
                       ('k, 'comparator,
                        ('k key_ * 'v) list -> ('k, 'v, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val of_alist_multi :
                       ('k, 'comparator,
                        ('k key_ * 'v) list -> ('k, 'v list, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val of_alist_fold :
                       ('k, 'comparator,
                        ('k key_ * 'v1) list ->
                        init:'v2 ->
                        f:('v2 -> 'v1 -> 'v2) -> ('k, 'v2, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val of_tree :
                       ('k, 'comparator,
                        ('k key_, 'v, 'comparator) tree ->
                        ('k, 'v, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val invariants :
                       ('k, 'comparator, ('k, 'v, 'comparator) t_ -> bool)
                       Core_map_intf.without_comparator
                     val is_empty : ('a, 'b, 'c) t_ -> bool
                     val length : ('a, 'b, 'c) t_ -> int
                     val add :
                       ('k, 'comparator,
                        ('k, 'v, 'comparator) t_ ->
                        key:'k key_ -> data:'-> ('k, 'v, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val add_multi :
                       ('k, 'comparator,
                        ('k, 'v list, 'comparator) t_ ->
                        key:'k key_ ->
                        data:'-> ('k, 'v list, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val change :
                       ('k, 'comparator,
                        ('k, 'v, 'comparator) t_ ->
                        'k key_ ->
                        ('v option -> 'v option) -> ('k, 'v, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val find :
                       ('k, 'comparator,
                        ('k, 'v, 'comparator) t_ -> 'k key_ -> 'v option)
                       Core_map_intf.without_comparator
                     val find_exn :
                       ('k, 'comparator,
                        ('k, 'v, 'comparator) t_ -> 'k key_ -> 'v)
                       Core_map_intf.without_comparator
                     val remove :
                       ('k, 'comparator,
                        ('k, 'v, 'comparator) t_ ->
                        'k key_ -> ('k, 'v, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val mem :
                       ('k, 'comparator,
                        ('k, 'a, 'comparator) t_ -> 'k key_ -> bool)
                       Core_map_intf.without_comparator
                     val iter :
                       ('k, 'v, 'a) t_ ->
                       f:(key:'k key_ -> data:'-> unit) -> unit
                     val iter2 :
                       ('k, 'comparator,
                        ('k, 'v1, 'comparator) t_ ->
                        ('k, 'v2, 'comparator) t_ ->
                        f:(key:'k key_ ->
                           data:[ `Both of 'v1 * 'v2
                                | `Left of 'v1
                                | `Right of 'v2 ] ->
                           unit) ->
                        unit)
                       Core_map_intf.without_comparator
                     val map :
                       ('k, 'v1, 'comparator) t_ ->
                       f:('v1 -> 'v2) -> ('k, 'v2, 'comparator) t_
                     val mapi :
                       ('k, 'v1, 'comparator) t_ ->
                       f:(key:'k key_ -> data:'v1 -> 'v2) ->
                       ('k, 'v2, 'comparator) t_
                     val fold :
                       ('k, 'v, 'b) t_ ->
                       init:'->
                       f:(key:'k key_ -> data:'-> '-> 'a) -> 'a
                     val fold_right :
                       ('k, 'v, 'b) t_ ->
                       init:'->
                       f:(key:'k key_ -> data:'-> '-> 'a) -> 'a
                     val filter :
                       ('k, 'comparator,
                        ('k, 'v, 'comparator) t_ ->
                        f:(key:'k key_ -> data:'-> bool) ->
                        ('k, 'v, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val filter_map :
                       ('k, 'comparator,
                        ('k, 'v1, 'comparator) t_ ->
                        f:('v1 -> 'v2 option) -> ('k, 'v2, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val filter_mapi :
                       ('k, 'comparator,
                        ('k, 'v1, 'comparator) t_ ->
                        f:(key:'k key_ -> data:'v1 -> 'v2 option) ->
                        ('k, 'v2, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val compare_direct :
                       ('k, 'comparator,
                        ('-> '-> int) ->
                        ('k, 'v, 'comparator) t_ ->
                        ('k, 'v, 'comparator) t_ -> int)
                       Core_map_intf.without_comparator
                     val equal :
                       ('k, 'comparator,
                        ('-> '-> bool) ->
                        ('k, 'v, 'comparator) t_ ->
                        ('k, 'v, 'comparator) t_ -> bool)
                       Core_map_intf.without_comparator
                     val keys : ('k, 'a, 'b) t_ -> 'k key_ list
                     val data : ('a, 'v, 'b) t_ -> 'v list
                     val to_alist : ('k, 'v, 'a) t_ -> ('k key_ * 'v) list
                     val merge :
                       ('k, 'comparator,
                        ('k, 'v1, 'comparator) t_ ->
                        ('k, 'v2, 'comparator) t_ ->
                        f:(key:'k key_ ->
                           [ `Both of 'v1 * 'v2
                           | `Left of 'v1
                           | `Right of 'v2 ] -> 'v3 option) ->
                        ('k, 'v3, 'comparator) t_)
                       Core_map_intf.without_comparator
                     val symmetric_diff :
                       ('k, 'comparator,
                        ('k, 'v, 'comparator) t_ ->
                        ('k, 'v, 'comparator) t_ ->
                        data_equal:('-> '-> bool) ->
                        ('k key_ *
                         [ `Left of '| `Right of '| `Unequal of 'v * 'v ])
                        list)
                       Core_map_intf.without_comparator
                     val min_elt : ('k, 'v, 'a) t_ -> ('k key_ * 'v) option
                     val min_elt_exn : ('k, 'v, 'a) t_ -> 'k key_ * 'v
                     val max_elt : ('k, 'v, 'a) t_ -> ('k key_ * 'v) option
                     val max_elt_exn : ('k, 'v, 'a) t_ -> 'k key_ * 'v
                     val for_all : ('k, 'v, 'a) t_ -> f:('-> bool) -> bool
                     val exists : ('k, 'v, 'a) t_ -> f:('-> bool) -> bool
                     val fold_range_inclusive :
                       ('k, 'comparator,
                        ('k, 'v, 'comparator) t_ ->
                        min:'k key_ ->
                        max:'k key_ ->
                        init:'->
                        f:(key:'k key_ -> data:'-> '-> 'a) -> 'a)
                       Core_map_intf.without_comparator
                     val range_to_alist :
                       ('k, 'comparator,
                        ('k, 'v, 'comparator) t_ ->
                        min:'k key_ -> max:'k key_ -> ('k key_ * 'v) list)
                       Core_map_intf.without_comparator
                     val prev_key :
                       ('k, 'comparator,
                        ('k, 'v, 'comparator) t_ ->
                        'k key_ -> ('k key_ * 'v) option)
                       Core_map_intf.without_comparator
                     val next_key :
                       ('k, 'comparator,
                        ('k, 'v, 'comparator) t_ ->
                        'k key_ -> ('k key_ * 'v) option)
                       Core_map_intf.without_comparator
                     val rank :
                       ('k, 'comparator,
                        ('k, 'v, 'comparator) t_ -> 'k key_ -> int option)
                       Core_map_intf.without_comparator
                     val to_tree :
                       ('k, 'v, 'comparator) t_ ->
                       ('k key_, 'v, 'comparator) tree
                     val t_of_sexp :
                       (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
                     val sexp_of_t :
                       ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
                   end
                 val compare : ('-> '-> int) -> 'v t -> 'v t -> int
                 val t_of_sexp :
                   (Sexplib.Sexp.t -> 'v) -> Sexplib.Sexp.t -> 'v t
                 val sexp_of_t :
                   ('-> Sexplib.Sexp.t) -> 'v t -> Sexplib.Sexp.t
               end
             module Set :
               sig
                 module Elt :
                   sig
                     type t = t
                     val compare : t -> t -> int
                     val t_of_sexp : Sexplib.Sexp.t -> t
                     val sexp_of_t : t -> Sexplib.Sexp.t
                     type comparator = comparator
                     val comparator : (t, comparator) Comparator.t_
                   end
                 type ('a, 'b) set = ('a, 'b) Set.t
                 type ('a, 'b) tree = ('a, 'b) Set.tree
                 type t = (Elt.t, Elt.comparator) set
                 type ('a, 'comparator) t_ = t
                 type 'a elt_ = Elt.t
                 val singleton :
                   ('a, 'comparator, 'a elt_ -> ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val union_list :
                   ('a, 'comparator,
                    ('a, 'comparator) t_ list -> ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val of_list :
                   ('a, 'comparator, 'a elt_ list -> ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val of_array :
                   ('a, 'comparator, 'a elt_ array -> ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val of_sorted_array :
                   ('a, 'comparator,
                    'a elt_ array -> ('a, 'comparator) t_ Or_error.t)
                   Core_set_intf.without_comparator
                 val of_sorted_array_unchecked :
                   ('a, 'comparator, 'a elt_ array -> ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val stable_dedup_list :
                   ('a, 'b, 'a elt_ list -> 'a elt_ list)
                   Core_set_intf.without_comparator
                 val map :
                   ('b, 'comparator,
                    ('a, 'c) set -> f:('-> 'b elt_) -> ('b, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val filter_map :
                   ('b, 'comparator,
                    ('a, 'c) set ->
                    f:('-> 'b elt_ option) -> ('b, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val of_tree :
                   ('a, 'comparator,
                    ('a elt_, 'comparator) tree -> ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val length : ('a, 'b) t_ -> int
                 val is_empty : ('a, 'b) t_ -> bool
                 val iter : ('a, 'b) t_ -> f:('a elt_ -> unit) -> unit
                 val fold :
                   ('a, 'b) t_ ->
                   init:'accum -> f:('accum -> 'a elt_ -> 'accum) -> 'accum
                 val exists : ('a, 'b) t_ -> f:('a elt_ -> bool) -> bool
                 val for_all : ('a, 'b) t_ -> f:('a elt_ -> bool) -> bool
                 val count : ('a, 'b) t_ -> f:('a elt_ -> bool) -> int
                 val find :
                   ('a, 'b) t_ -> f:('a elt_ -> bool) -> 'a elt_ option
                 val find_map :
                   ('a, 'c) t_ -> f:('a elt_ -> 'b option) -> 'b option
                 val to_list : ('a, 'b) t_ -> 'a elt_ list
                 val to_array : ('a, 'b) t_ -> 'a elt_ array
                 val invariants :
                   ('a, 'comparator, ('a, 'comparator) t_ -> bool)
                   Core_set_intf.without_comparator
                 val mem :
                   ('a, 'comparator, ('a, 'comparator) t_ -> 'a elt_ -> bool)
                   Core_set_intf.without_comparator
                 val add :
                   ('a, 'comparator,
                    ('a, 'comparator) t_ -> 'a elt_ -> ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val remove :
                   ('a, 'comparator,
                    ('a, 'comparator) t_ -> 'a elt_ -> ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val union :
                   ('a, 'comparator,
                    ('a, 'comparator) t_ ->
                    ('a, 'comparator) t_ -> ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val inter :
                   ('a, 'comparator,
                    ('a, 'comparator) t_ ->
                    ('a, 'comparator) t_ -> ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val diff :
                   ('a, 'comparator,
                    ('a, 'comparator) t_ ->
                    ('a, 'comparator) t_ -> ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val compare_direct :
                   ('a, 'comparator,
                    ('a, 'comparator) t_ -> ('a, 'comparator) t_ -> int)
                   Core_set_intf.without_comparator
                 val equal :
                   ('a, 'comparator,
                    ('a, 'comparator) t_ -> ('a, 'comparator) t_ -> bool)
                   Core_set_intf.without_comparator
                 val subset :
                   ('a, 'comparator,
                    ('a, 'comparator) t_ -> ('a, 'comparator) t_ -> bool)
                   Core_set_intf.without_comparator
                 val fold_until :
                   ('a, 'c) t_ ->
                   init:'->
                   f:('-> 'a elt_ -> [ `Continue of '| `Stop of 'b ]) ->
                   'b
                 val fold_right :
                   ('a, 'c) t_ -> init:'-> f:('a elt_ -> '-> 'b) -> 'b
                 val iter2 :
                   ('a, 'comparator,
                    ('a, 'comparator) t_ ->
                    ('a, 'comparator) t_ ->
                    f:([ `Both of 'a elt_ * 'a elt_
                       | `Left of 'a elt_
                       | `Right of 'a elt_ ] -> unit) ->
                    unit)
                   Core_set_intf.without_comparator
                 val filter :
                   ('a, 'comparator,
                    ('a, 'comparator) t_ ->
                    f:('a elt_ -> bool) -> ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val partition_tf :
                   ('a, 'comparator,
                    ('a, 'comparator) t_ ->
                    f:('a elt_ -> bool) ->
                    ('a, 'comparator) t_ * ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 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, 'comparator,
                    ('a, 'comparator) t_ ->
                    'a elt_ ->
                    ('a, 'comparator) t_ * bool * ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val group_by :
                   ('a, 'comparator,
                    ('a, 'comparator) t_ ->
                    equiv:('a elt_ -> 'a elt_ -> bool) ->
                    ('a, 'comparator) t_ list)
                   Core_set_intf.without_comparator
                 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, 'comparator,
                    ('a, 'comparator) t_ -> int -> ('a, 'comparator) t_)
                   Core_set_intf.without_comparator
                 val to_tree :
                   ('a, 'comparator) t_ -> ('a elt_, 'comparator) tree
                 val empty : t
                 module Tree :
                   sig
                     type t = (Elt.t, Elt.comparator) tree
                     type ('a, 'b) t_ = t
                     val empty :
                       ('a, 'comparator, ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val singleton :
                       ('a, 'comparator, 'a elt_ -> ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val union_list :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ list -> ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val of_list :
                       ('a, 'comparator,
                        'a elt_ list -> ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val of_array :
                       ('a, 'comparator,
                        'a elt_ array -> ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val of_sorted_array :
                       ('a, 'comparator,
                        'a elt_ array -> ('a, 'comparator) t_ Or_error.t)
                       Core_set_intf.without_comparator
                     val of_sorted_array_unchecked :
                       ('a, 'comparator,
                        'a elt_ array -> ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val stable_dedup_list :
                       ('a, 'b, 'a elt_ list -> 'a elt_ list)
                       Core_set_intf.without_comparator
                     val map :
                       ('b, 'comparator,
                        ('a, 'c) tree ->
                        f:('-> 'b elt_) -> ('b, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val filter_map :
                       ('b, 'comparator,
                        ('a, 'c) tree ->
                        f:('-> 'b elt_ option) -> ('b, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val of_tree :
                       ('a, 'comparator,
                        ('a elt_, 'comparator) tree -> ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val length : ('a, 'b) t_ -> int
                     val is_empty : ('a, 'b) t_ -> bool
                     val iter : ('a, 'b) t_ -> f:('a elt_ -> unit) -> unit
                     val fold :
                       ('a, 'b) t_ ->
                       init:'accum ->
                       f:('accum -> 'a elt_ -> 'accum) -> 'accum
                     val exists : ('a, 'b) t_ -> f:('a elt_ -> bool) -> bool
                     val for_all : ('a, 'b) t_ -> f:('a elt_ -> bool) -> bool
                     val count : ('a, 'b) t_ -> f:('a elt_ -> bool) -> int
                     val find :
                       ('a, 'b) t_ -> f:('a elt_ -> bool) -> 'a elt_ option
                     val find_map :
                       ('a, 'c) t_ -> f:('a elt_ -> 'b option) -> 'b option
                     val to_list : ('a, 'b) t_ -> 'a elt_ list
                     val to_array : ('a, 'b) t_ -> 'a elt_ array
                     val invariants :
                       ('a, 'comparator, ('a, 'comparator) t_ -> bool)
                       Core_set_intf.without_comparator
                     val mem :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ -> 'a elt_ -> bool)
                       Core_set_intf.without_comparator
                     val add :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ ->
                        'a elt_ -> ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val remove :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ ->
                        'a elt_ -> ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val union :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ ->
                        ('a, 'comparator) t_ -> ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val inter :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ ->
                        ('a, 'comparator) t_ -> ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val diff :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ ->
                        ('a, 'comparator) t_ -> ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val compare_direct :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ -> ('a, 'comparator) t_ -> int)
                       Core_set_intf.without_comparator
                     val equal :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ -> ('a, 'comparator) t_ -> bool)
                       Core_set_intf.without_comparator
                     val subset :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ -> ('a, 'comparator) t_ -> bool)
                       Core_set_intf.without_comparator
                     val fold_until :
                       ('a, 'c) t_ ->
                       init:'->
                       f:('-> 'a elt_ -> [ `Continue of '| `Stop of 'b ]) ->
                       'b
                     val fold_right :
                       ('a, 'c) t_ ->
                       init:'-> f:('a elt_ -> '-> 'b) -> 'b
                     val iter2 :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ ->
                        ('a, 'comparator) t_ ->
                        f:([ `Both of 'a elt_ * 'a elt_
                           | `Left of 'a elt_
                           | `Right of 'a elt_ ] -> unit) ->
                        unit)
                       Core_set_intf.without_comparator
                     val filter :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ ->
                        f:('a elt_ -> bool) -> ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val partition_tf :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ ->
                        f:('a elt_ -> bool) ->
                        ('a, 'comparator) t_ * ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     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, 'comparator,
                        ('a, 'comparator) t_ ->
                        'a elt_ ->
                        ('a, 'comparator) t_ * bool * ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val group_by :
                       ('a, 'comparator,
                        ('a, 'comparator) t_ ->
                        equiv:('a elt_ -> 'a elt_ -> bool) ->
                        ('a, 'comparator) t_ list)
                       Core_set_intf.without_comparator
                     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, 'comparator,
                        ('a, 'comparator) t_ -> int -> ('a, 'comparator) t_)
                       Core_set_intf.without_comparator
                     val to_tree :
                       ('a, 'comparator) t_ -> ('a elt_, 'comparator) tree
                     val t_of_sexp : Sexplib.Sexp.t -> t
                     val sexp_of_t : t -> Sexplib.Sexp.t
                     val compare : t -> t -> int
                   end
                 val t_of_sexp : Sexplib.Sexp.t -> t
                 val sexp_of_t : t -> Sexplib.Sexp.t
                 val compare : t -> t -> int
               end
             val t_of_sexp : Sexplib.Sexp.t -> Interval.Make.t
             val sexp_of_t : Interval.Make.t -> Sexplib.Sexp.t
             val bin_t : Interval.Make.t Bin_prot.Type_class.t
             val bin_read_t : Interval.Make.t Bin_prot.Read_ml.reader
             val bin_read_t_ : Interval.Make.t Bin_prot.Unsafe_read_c.reader
             val bin_read_t__ :
               (int -> Interval.Make.t) Bin_prot.Unsafe_read_c.reader
             val bin_reader_t : Interval.Make.t Bin_prot.Type_class.reader
             val bin_size_t : Interval.Make.t Bin_prot.Size.sizer
             val bin_write_t : Interval.Make.t Bin_prot.Write_ml.writer
             val bin_write_t_ :
               Interval.Make.t Bin_prot.Unsafe_write_c.writer
             val bin_writer_t : Interval.Make.t Bin_prot.Type_class.writer
           end->
  sig
    type t
    type bound = Bound.t
    type 'a t_ = t
    type 'a bound_ = bound
    val empty : 'a t_
    val intersect : 'a t_ -> 'a t_ -> 'a t_
    val is_empty : 'a t_ -> bool
    val is_empty_or_singleton : 'a t_ -> bool
    val bounds : 'a t_ -> ('a bound_ * 'a bound_) option
    val lbound : 'a t_ -> 'a bound_ option
    val ubound : 'a t_ -> 'a bound_ option
    val bounds_exn : 'a t_ -> 'a bound_ * 'a bound_
    val lbound_exn : 'a t_ -> 'a bound_
    val ubound_exn : 'a t_ -> 'a bound_
    val contains : 'a t_ -> 'a bound_ -> bool
    val compare_value :
      'a t_ ->
      'a bound_ -> [ `Above | `Below | `Interval_is_empty | `Within ]
    val bound : 'a t_ -> 'a bound_ -> 'a bound_ option
    val is_superset : 'a t_ -> of_:'a t_ -> bool
    val is_subset : 'a t_ -> of_:'a t_ -> bool
    val map : 'a t_ -> f:('a bound_ -> 'b bound_) -> 'b t_
    val are_disjoint : 'a t_ list -> bool
    val are_disjoint_as_open_intervals : 'a t_ list -> bool
    val list_intersect : 'a t_ list -> 'a t_ list -> 'a t_ list
    val half_open_intervals_are_a_partition : 'a t_ list -> bool
    val create : bound -> bound -> t
    val to_poly : t -> bound t
    module Set :
      sig
        type t
        type 'a t_ = t
        val create : ('a bound_ * 'a bound_) list -> 'a t_
        val create_from_intervals : 'a t_ list -> 'a t_
        val contains : 'a t_ -> 'a bound_ -> bool
        val contains_set : container:'a t_ -> contained:'a t_ -> bool
        val ubound_exn : 'a t_ -> 'a bound_
        val lbound_exn : 'a t_ -> 'a bound_
        val ubound : 'a t_ -> 'a bound_ option
        val lbound : 'a t_ -> 'a bound_ option
        val to_poly : t -> bound Set.t
        val t_of_sexp : Sexplib.Sexp.t -> t
        val sexp_of_t : t -> Sexplib.Sexp.t
        val bin_t : t Bin_prot.Type_class.t
        val bin_read_t : t Bin_prot.Read_ml.reader
        val bin_read_t_ : t Bin_prot.Unsafe_read_c.reader
        val bin_read_t__ : (int -> t) Bin_prot.Unsafe_read_c.reader
        val bin_reader_t : t Bin_prot.Type_class.reader
        val bin_size_t : t Bin_prot.Size.sizer
        val bin_write_t : t Bin_prot.Write_ml.writer
        val bin_write_t_ : t Bin_prot.Unsafe_write_c.writer
        val bin_writer_t : t Bin_prot.Type_class.writer
      end
    val t_of_sexp : Sexplib.Sexp.t -> t
    val sexp_of_t : t -> Sexplib.Sexp.t
    val bin_t : t Bin_prot.Type_class.t
    val bin_read_t : t Bin_prot.Read_ml.reader
    val bin_read_t_ : t Bin_prot.Unsafe_read_c.reader
    val bin_read_t__ : (int -> t) Bin_prot.Unsafe_read_c.reader
    val bin_reader_t : t Bin_prot.Type_class.reader
    val bin_size_t : t Bin_prot.Size.sizer
    val bin_write_t : t Bin_prot.Write_ml.writer
    val bin_write_t_ : t Bin_prot.Unsafe_write_c.writer
    val bin_writer_t : t Bin_prot.Type_class.writer
  end