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