`sig module type OrderedType = BatInterfaces.OrderedType module type S = sig type elt type t val empty : BatSet.S.t val is_empty : BatSet.S.t -> bool val singleton : BatSet.S.elt -> BatSet.S.t val mem : BatSet.S.elt -> BatSet.S.t -> bool val find : BatSet.S.elt -> BatSet.S.t -> BatSet.S.elt val add : BatSet.S.elt -> BatSet.S.t -> BatSet.S.t val remove : BatSet.S.elt -> BatSet.S.t -> BatSet.S.t val update : BatSet.S.elt -> BatSet.S.elt -> BatSet.S.t -> BatSet.S.t val union : BatSet.S.t -> BatSet.S.t -> BatSet.S.t val inter : BatSet.S.t -> BatSet.S.t -> BatSet.S.t val diff : BatSet.S.t -> BatSet.S.t -> BatSet.S.t val sym_diff : BatSet.S.t -> BatSet.S.t -> BatSet.S.t val compare : BatSet.S.t -> BatSet.S.t -> int val equal : BatSet.S.t -> BatSet.S.t -> bool val subset : BatSet.S.t -> BatSet.S.t -> bool val disjoint : BatSet.S.t -> BatSet.S.t -> bool val compare_subset : BatSet.S.t -> BatSet.S.t -> int val iter : (BatSet.S.elt -> unit) -> BatSet.S.t -> unit val at_rank_exn : int -> BatSet.S.t -> BatSet.S.elt val map : (BatSet.S.elt -> BatSet.S.elt) -> BatSet.S.t -> BatSet.S.t val filter : (BatSet.S.elt -> bool) -> BatSet.S.t -> BatSet.S.t val filter_map : (BatSet.S.elt -> BatSet.S.elt option) -> BatSet.S.t -> BatSet.S.t val fold : (BatSet.S.elt -> 'a -> 'a) -> BatSet.S.t -> 'a -> 'a val for_all : (BatSet.S.elt -> bool) -> BatSet.S.t -> bool val exists : (BatSet.S.elt -> bool) -> BatSet.S.t -> bool val partition : (BatSet.S.elt -> bool) -> BatSet.S.t -> BatSet.S.t * BatSet.S.t val split : BatSet.S.elt -> BatSet.S.t -> BatSet.S.t * bool * BatSet.S.t val split_opt : BatSet.S.elt -> BatSet.S.t -> BatSet.S.t * BatSet.S.elt option * BatSet.S.t val split_lt : BatSet.S.elt -> BatSet.S.t -> BatSet.S.t * BatSet.S.t val split_le : BatSet.S.elt -> BatSet.S.t -> BatSet.S.t * BatSet.S.t val cardinal : BatSet.S.t -> int val elements : BatSet.S.t -> BatSet.S.elt list val to_list : BatSet.S.t -> BatSet.S.elt list val to_array : BatSet.S.t -> BatSet.S.elt array val min_elt : BatSet.S.t -> BatSet.S.elt val pop_min : BatSet.S.t -> BatSet.S.elt * BatSet.S.t val pop_max : BatSet.S.t -> BatSet.S.elt * BatSet.S.t val max_elt : BatSet.S.t -> BatSet.S.elt val choose : BatSet.S.t -> BatSet.S.elt val pop : BatSet.S.t -> BatSet.S.elt * BatSet.S.t val enum : BatSet.S.t -> BatSet.S.elt BatEnum.t val backwards : BatSet.S.t -> BatSet.S.elt BatEnum.t val of_enum : BatSet.S.elt BatEnum.t -> BatSet.S.t val of_list : BatSet.S.elt list -> BatSet.S.t val of_array : BatSet.S.elt array -> BatSet.S.t val print : ?first:string -> ?last:string -> ?sep:string -> ('a BatInnerIO.output -> BatSet.S.elt -> unit) -> 'a BatInnerIO.output -> BatSet.S.t -> unit module Infix : sig val ( <-- ) : BatSet.S.t -> BatSet.S.elt -> BatSet.S.t val ( <. ) : BatSet.S.t -> BatSet.S.t -> bool val ( >. ) : BatSet.S.t -> BatSet.S.t -> bool val ( <=. ) : BatSet.S.t -> BatSet.S.t -> bool val ( >=. ) : BatSet.S.t -> BatSet.S.t -> bool val ( -. ) : BatSet.S.t -> BatSet.S.t -> BatSet.S.t val ( &&. ) : BatSet.S.t -> BatSet.S.t -> BatSet.S.t val ( ||. ) : BatSet.S.t -> BatSet.S.t -> BatSet.S.t end module Exceptionless : sig val min_elt : BatSet.S.t -> BatSet.S.elt option val max_elt : BatSet.S.t -> BatSet.S.elt option val choose : BatSet.S.t -> BatSet.S.elt option val find : BatSet.S.elt -> BatSet.S.t -> BatSet.S.elt option end module Labels : sig val iter : f:(BatSet.S.elt -> unit) -> BatSet.S.t -> unit val fold : f:(BatSet.S.elt -> 'a -> 'a) -> BatSet.S.t -> init:'a -> 'a val for_all : f:(BatSet.S.elt -> bool) -> BatSet.S.t -> bool val exists : f:(BatSet.S.elt -> bool) -> BatSet.S.t -> bool val map : f:(BatSet.S.elt -> BatSet.S.elt) -> BatSet.S.t -> BatSet.S.t val filter : f:(BatSet.S.elt -> bool) -> BatSet.S.t -> BatSet.S.t val filter_map : f:(BatSet.S.elt -> BatSet.S.elt option) -> BatSet.S.t -> BatSet.S.t val partition : f:(BatSet.S.elt -> bool) -> BatSet.S.t -> BatSet.S.t * BatSet.S.t end end module Make : functor (Ord : OrderedType) -> sig type elt = Ord.t type t val empty : t val is_empty : t -> bool val singleton : elt -> t val mem : elt -> t -> bool val find : elt -> t -> elt val add : elt -> t -> t val remove : elt -> t -> t val update : elt -> elt -> t -> t val union : t -> t -> t val inter : t -> t -> t val diff : t -> t -> t val sym_diff : t -> t -> t val compare : t -> t -> int val equal : t -> t -> bool val subset : t -> t -> bool val disjoint : t -> t -> bool val compare_subset : t -> t -> int val iter : (elt -> unit) -> t -> unit val at_rank_exn : int -> t -> elt val map : (elt -> elt) -> t -> t val filter : (elt -> bool) -> t -> t val filter_map : (elt -> elt option) -> t -> t val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a val for_all : (elt -> bool) -> t -> bool val exists : (elt -> bool) -> t -> bool val partition : (elt -> bool) -> t -> t * t val split : elt -> t -> t * bool * t val split_opt : elt -> t -> t * elt option * t val split_lt : elt -> t -> t * t val split_le : elt -> t -> t * t val cardinal : t -> int val elements : t -> elt list val to_list : t -> elt list val to_array : t -> elt array val min_elt : t -> elt val pop_min : t -> elt * t val pop_max : t -> elt * t val max_elt : t -> elt val choose : t -> elt val pop : t -> elt * t val enum : t -> elt BatEnum.t val backwards : t -> elt BatEnum.t val of_enum : elt BatEnum.t -> t val of_list : elt list -> t val of_array : elt array -> t val print : ?first:string -> ?last:string -> ?sep:string -> ('a BatInnerIO.output -> elt -> unit) -> 'a BatInnerIO.output -> t -> unit module Infix : sig val ( <-- ) : t -> elt -> t val ( <. ) : t -> t -> bool val ( >. ) : t -> t -> bool val ( <=. ) : t -> t -> bool val ( >=. ) : t -> t -> bool val ( -. ) : t -> t -> t val ( &&. ) : t -> t -> t val ( ||. ) : t -> t -> t end module Exceptionless : sig val min_elt : t -> elt option val max_elt : t -> elt option val choose : t -> elt option val find : elt -> t -> elt option end module Labels : sig val iter : f:(elt -> unit) -> t -> unit val fold : f:(elt -> 'a -> 'a) -> t -> init:'a -> 'a val for_all : f:(elt -> bool) -> t -> bool val exists : f:(elt -> bool) -> t -> bool val map : f:(elt -> elt) -> t -> t val filter : f:(elt -> bool) -> t -> t val filter_map : f:(elt -> elt option) -> t -> t val partition : f:(elt -> bool) -> t -> t * t end end module Make2 : functor (O1 : OrderedType) (O2 : OrderedType) -> sig module Product : sig type elt = O1.t * O2.t type t val empty : t val is_empty : t -> bool val singleton : elt -> t val mem : elt -> t -> bool val find : elt -> t -> elt val add : elt -> t -> t val remove : elt -> t -> t val update : elt -> elt -> t -> t val union : t -> t -> t val inter : t -> t -> t val diff : t -> t -> t val sym_diff : t -> t -> t val compare : t -> t -> int val equal : t -> t -> bool val subset : t -> t -> bool val disjoint : t -> t -> bool val compare_subset : t -> t -> int val iter : (elt -> unit) -> t -> unit val at_rank_exn : int -> t -> elt val map : (elt -> elt) -> t -> t val filter : (elt -> bool) -> t -> t val filter_map : (elt -> elt option) -> t -> t val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a val for_all : (elt -> bool) -> t -> bool val exists : (elt -> bool) -> t -> bool val partition : (elt -> bool) -> t -> t * t val split : elt -> t -> t * bool * t val split_opt : elt -> t -> t * elt option * t val split_lt : elt -> t -> t * t val split_le : elt -> t -> t * t val cardinal : t -> int val elements : t -> elt list val to_list : t -> elt list val to_array : t -> elt array val min_elt : t -> elt val pop_min : t -> elt * t val pop_max : t -> elt * t val max_elt : t -> elt val choose : t -> elt val pop : t -> elt * t val enum : t -> elt BatEnum.t val backwards : t -> elt BatEnum.t val of_enum : elt BatEnum.t -> t val of_list : elt list -> t val of_array : elt array -> t val print : ?first:string -> ?last:string -> ?sep:string -> ('a BatInnerIO.output -> elt -> unit) -> 'a BatInnerIO.output -> t -> unit module Infix : sig val ( <-- ) : t -> elt -> t val ( <. ) : t -> t -> bool val ( >. ) : t -> t -> bool val ( <=. ) : t -> t -> bool val ( >=. ) : t -> t -> bool val ( -. ) : t -> t -> t val ( &&. ) : t -> t -> t val ( ||. ) : t -> t -> t end module Exceptionless : sig val min_elt : t -> elt option val max_elt : t -> elt option val choose : t -> elt option val find : elt -> t -> elt option end module Labels : sig val iter : f:(elt -> unit) -> t -> unit val fold : f:(elt -> 'a -> 'a) -> t -> init:'a -> 'a val for_all : f:(elt -> bool) -> t -> bool val exists : f:(elt -> bool) -> t -> bool val map : f:(elt -> elt) -> t -> t val filter : f:(elt -> bool) -> t -> t val filter_map : f:(elt -> elt option) -> t -> t val partition : f:(elt -> bool) -> t -> t * t end end val cartesian_product : Make(O1).t -> Make(O2).t -> BatSet.Make2.Product.t end type 'a t type 'a enumerable = 'a t type 'a mappable = 'a t val empty : 'a BatSet.t val is_empty : 'a BatSet.t -> bool val singleton : 'a -> 'a BatSet.t val mem : 'a -> 'a BatSet.t -> bool val find : 'a -> 'a BatSet.t -> 'a val add : 'a -> 'a BatSet.t -> 'a BatSet.t val remove : 'a -> 'a BatSet.t -> 'a BatSet.t val update : 'a -> 'a -> 'a BatSet.t -> 'a BatSet.t val union : 'a BatSet.t -> 'a BatSet.t -> 'a BatSet.t val intersect : 'a BatSet.t -> 'a BatSet.t -> 'a BatSet.t val diff : 'a BatSet.t -> 'a BatSet.t -> 'a BatSet.t val sym_diff : 'a BatSet.t -> 'a BatSet.t -> 'a BatSet.t val compare : 'a BatSet.t -> 'a BatSet.t -> int val equal : 'a BatSet.t -> 'a BatSet.t -> bool val subset : 'a BatSet.t -> 'a BatSet.t -> bool val disjoint : 'a BatSet.t -> 'a BatSet.t -> bool val iter : ('a -> unit) -> 'a BatSet.t -> unit val at_rank_exn : int -> 'a BatSet.t -> 'a val map : ('a -> 'b) -> 'a BatSet.t -> 'b BatSet.t val filter : ('a -> bool) -> 'a BatSet.t -> 'a BatSet.t val filter_map : ('a -> 'b option) -> 'a BatSet.t -> 'b BatSet.t val fold : ('a -> 'b -> 'b) -> 'a BatSet.t -> 'b -> 'b val exists : ('a -> bool) -> 'a BatSet.t -> bool val for_all : ('a -> bool) -> 'a BatSet.t -> bool val partition : ('a -> bool) -> 'a BatSet.t -> 'a BatSet.t * 'a BatSet.t val split : 'a -> 'a BatSet.t -> 'a BatSet.t * bool * 'a BatSet.t val split_opt : 'a -> 'a BatSet.t -> 'a BatSet.t * 'a option * 'a BatSet.t val split_lt : 'a -> 'a BatSet.t -> 'a BatSet.t * 'a BatSet.t val split_le : 'a -> 'a BatSet.t -> 'a BatSet.t * 'a BatSet.t val cardinal : 'a BatSet.t -> int val elements : 'a BatSet.t -> 'a list val to_list : 'a BatSet.t -> 'a list val to_array : 'a BatSet.t -> 'a array val min_elt : 'a BatSet.t -> 'a val pop_min : 'a BatSet.t -> 'a * 'a BatSet.t val pop_max : 'a BatSet.t -> 'a * 'a BatSet.t val max_elt : 'a BatSet.t -> 'a val choose : 'a BatSet.t -> 'a val pop : 'a BatSet.t -> 'a * 'a BatSet.t val cartesian_product : 'a BatSet.t -> 'b BatSet.t -> ('a * 'b) BatSet.t val enum : 'a BatSet.t -> 'a BatEnum.t val of_enum : 'a BatEnum.t -> 'a BatSet.t val backwards : 'a BatSet.t -> 'a BatEnum.t val of_list : 'a list -> 'a BatSet.t val of_array : 'a array -> 'a BatSet.t val print : ?first:string -> ?last:string -> ?sep:string -> ('a BatInnerIO.output -> 'c -> unit) -> 'a BatInnerIO.output -> 'c BatSet.t -> unit module Infix : sig val ( <-- ) : 'a BatSet.t -> 'a -> 'a BatSet.t val ( <. ) : 'a BatSet.t -> 'a BatSet.t -> bool val ( >. ) : 'a BatSet.t -> 'a BatSet.t -> bool val ( <=. ) : 'a BatSet.t -> 'a BatSet.t -> bool val ( >=. ) : 'a BatSet.t -> 'a BatSet.t -> bool val ( -. ) : 'a BatSet.t -> 'a BatSet.t -> 'a BatSet.t val ( &&. ) : 'a BatSet.t -> 'a BatSet.t -> 'a BatSet.t val ( ||. ) : 'a BatSet.t -> 'a BatSet.t -> 'a BatSet.t end module Incubator : sig val op_map : ('a -> 'b) -> 'a BatSet.t -> 'b BatSet.t end module PSet : sig type 'a t type 'a enumerable = 'a t type 'a mappable = 'a t val empty : 'a BatSet.PSet.t val create : ('a -> 'a -> int) -> 'a BatSet.PSet.t val is_empty : 'a BatSet.PSet.t -> bool val singleton : ?cmp:('a -> 'a -> int) -> 'a -> 'a BatSet.PSet.t val mem : 'a -> 'a BatSet.PSet.t -> bool val find : 'a -> 'a BatSet.PSet.t -> 'a val add : 'a -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t val remove : 'a -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t val update : 'a -> 'a -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t val union : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t val intersect : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t val diff : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t val sym_diff : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t val compare : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> int val equal : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> bool val subset : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> bool val disjoint : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> bool val iter : ('a -> unit) -> 'a BatSet.PSet.t -> unit val at_rank_exn : int -> 'a BatSet.PSet.t -> 'a val map : ('a -> 'b) -> 'a BatSet.PSet.t -> 'b BatSet.PSet.t val filter : ('a -> bool) -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t val filter_map : ('a -> 'b option) -> 'a BatSet.PSet.t -> 'b BatSet.PSet.t val fold : ('a -> 'b -> 'b) -> 'a BatSet.PSet.t -> 'b -> 'b val exists : ('a -> bool) -> 'a BatSet.PSet.t -> bool val for_all : ('a -> bool) -> 'a BatSet.PSet.t -> bool val partition : ('a -> bool) -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t * 'a BatSet.PSet.t val split : 'a -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t * bool * 'a BatSet.PSet.t val split_opt : 'a -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t * 'a option * 'a BatSet.PSet.t val split_lt : 'a -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t * 'a BatSet.PSet.t val split_le : 'a -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t * 'a BatSet.PSet.t val cardinal : 'a BatSet.PSet.t -> int val elements : 'a BatSet.PSet.t -> 'a list val to_list : 'a BatSet.PSet.t -> 'a list val to_array : 'a BatSet.PSet.t -> 'a array val min_elt : 'a BatSet.PSet.t -> 'a val pop_min : 'a BatSet.PSet.t -> 'a * 'a BatSet.PSet.t val pop_max : 'a BatSet.PSet.t -> 'a * 'a BatSet.PSet.t val max_elt : 'a BatSet.PSet.t -> 'a val choose : 'a BatSet.PSet.t -> 'a val pop : 'a BatSet.PSet.t -> 'a * 'a BatSet.PSet.t val enum : 'a BatSet.PSet.t -> 'a BatEnum.t val of_enum : 'a BatEnum.t -> 'a BatSet.PSet.t val of_enum_cmp : cmp:('a -> 'a -> int) -> 'a BatEnum.t -> 'a BatSet.PSet.t val of_list : 'a list -> 'a BatSet.PSet.t val of_array : 'a array -> 'a BatSet.PSet.t val print : ?first:string -> ?last:string -> ?sep:string -> ('a BatInnerIO.output -> 'c -> unit) -> 'a BatInnerIO.output -> 'c BatSet.PSet.t -> unit module Infix : sig val ( <-- ) : 'a BatSet.PSet.t -> 'a -> 'a BatSet.PSet.t val ( <. ) : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> bool val ( >. ) : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> bool val ( <=. ) : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> bool val ( >=. ) : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> bool val ( -. ) : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t val ( &&. ) : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t val ( ||. ) : 'a BatSet.PSet.t -> 'a BatSet.PSet.t -> 'a BatSet.PSet.t end val get_cmp : 'a BatSet.PSet.t -> 'a -> 'a -> int end end`