sig
  module Array :
    sig
      external length : 'a array -> int = "%array_length"
      external get : 'a array -> int -> 'a = "%array_safe_get"
      external set : 'a array -> int -> '-> unit = "%array_safe_set"
      external make : int -> '-> 'a array = "caml_make_vect"
      external create : int -> '-> 'a array = "caml_make_vect"
      val init : int -> (int -> 'a) -> 'a array
      val make_matrix : int -> int -> '-> 'a array array
      val create_matrix : int -> int -> '-> 'a array array
      val append : 'a array -> 'a array -> 'a array
      val concat : 'a array list -> 'a array
      val sub : 'a array -> int -> int -> 'a array
      val copy : 'a array -> 'a array
      val fill : 'a array -> int -> int -> '-> unit
      val blit : 'a array -> int -> 'a array -> int -> int -> unit
      val to_list : 'a array -> 'a list
      val of_list : 'a list -> 'a array
      val iter : ('-> unit) -> 'a array -> unit
      val map : ('-> 'b) -> 'a array -> 'b array
      val iteri : (int -> '-> unit) -> 'a array -> unit
      val mapi : (int -> '-> 'b) -> 'a array -> 'b array
      val fold_left : ('-> '-> 'a) -> '-> 'b array -> 'a
      val fold_right : ('-> '-> 'a) -> 'b array -> '-> 'a
      val sort : ('-> '-> int) -> 'a array -> unit
      val stable_sort : ('-> '-> int) -> 'a array -> unit
      val fast_sort : ('-> '-> int) -> 'a array -> unit
      external unsafe_get : 'a array -> int -> 'a = "%array_unsafe_get"
      external unsafe_set : 'a array -> int -> '-> unit
        = "%array_unsafe_set"
      type 'a t = 'a array
      type 'a enumerable = 'a t
      type 'a mappable = 'a t
      external length : 'a array -> int = "%array_length"
      external get : 'a array -> int -> 'a = "%array_safe_get"
      external set : 'a array -> int -> '-> unit = "%array_safe_set"
      external make : int -> '-> 'a array = "caml_make_vect"
      external create : int -> '-> 'a array = "caml_make_vect"
      val init : int -> (int -> 'a) -> 'a array
      val make_matrix : int -> int -> '-> 'a array array
      val create_matrix : int -> int -> '-> 'a array array
      val append : 'a array -> 'a array -> 'a array
      val concat : 'a array list -> 'a array
      val sub : 'a array -> int -> int -> 'a array
      val copy : 'a array -> 'a array
      val fill : 'a array -> int -> int -> '-> unit
      val blit : 'a array -> int -> 'a array -> int -> int -> unit
      val to_list : 'a array -> 'a list
      val of_list : 'a list -> 'a array
      val max : 'a array -> 'a
      val min : 'a array -> 'a
      val sum : int array -> int
      val fsum : float array -> float
      val left : 'a array -> int -> 'a array
      val right : 'a array -> int -> 'a array
      val head : 'a array -> int -> 'a array
      val tail : 'a array -> int -> 'a array
      val iter : ('-> unit) -> 'a array -> unit
      val map : ('-> 'b) -> 'a array -> 'b array
      val iteri : (int -> '-> unit) -> 'a array -> unit
      val mapi : (int -> '-> 'b) -> 'a array -> 'b array
      val fold_left : ('-> '-> 'a) -> '-> 'b array -> 'a
      val fold_right : ('-> '-> 'a) -> 'b array -> '-> 'a
      val modify : ('-> 'a) -> 'a array -> unit
      val modifyi : (int -> '-> 'a) -> 'a array -> unit
      val fold_lefti : ('-> int -> '-> 'a) -> '-> 'b array -> 'a
      val fold_righti : (int -> '-> '-> 'a) -> 'b array -> '-> 'a
      val reduce : ('-> '-> 'a) -> 'a array -> 'a
      val sort : ('-> '-> int) -> 'a array -> unit
      val stable_sort : ('-> '-> int) -> 'a array -> unit
      val fast_sort : ('-> '-> int) -> 'a array -> unit
      val decorate_stable_sort : ('-> 'b) -> 'a array -> 'a array
      val decorate_fast_sort : ('-> 'b) -> 'a array -> 'a array
      val iter2 : ('-> '-> unit) -> 'a array -> 'b array -> unit
      val iter2i : (int -> '-> '-> unit) -> 'a array -> 'b array -> unit
      val for_all2 : ('-> '-> bool) -> 'a array -> 'b array -> bool
      val exists2 : ('-> '-> bool) -> 'a array -> 'b array -> bool
      val map2 : ('-> '-> 'c) -> 'a array -> 'b array -> 'c array
      val for_all : ('-> bool) -> 'a array -> bool
      val exists : ('-> bool) -> 'a array -> bool
      val find : ('-> bool) -> 'a array -> 'a
      val mem : '-> 'a array -> bool
      val memq : '-> 'a array -> bool
      val findi : ('-> bool) -> 'a array -> int
      val filter : ('-> bool) -> 'a array -> 'a array
      val filteri : (int -> '-> bool) -> 'a array -> 'a array
      val filter_map : ('-> 'b option) -> 'a array -> 'b array
      val find_all : ('-> bool) -> 'a array -> 'a array
      val partition : ('-> bool) -> 'a array -> 'a array * 'a array
      val rev : 'a array -> 'a array
      val rev_in_place : 'a array -> unit
      val enum : 'a array -> 'BatEnum.t
      val of_enum : 'BatEnum.t -> 'a array
      val backwards : 'a array -> 'BatEnum.t
      val of_backwards : 'BatEnum.t -> 'a array
      val range : 'a array -> int BatEnum.t
      val insert : 'a array -> '-> int -> 'a array
      val print :
        ?first:string ->
        ?last:string ->
        ?sep:string -> ('a, 'b) BatIO.printer -> ('a t, 'b) BatIO.printer
      val compare : 'BatOrd.comp -> 'a array BatOrd.comp
      val ord : 'BatOrd.ord -> 'a array BatOrd.ord
      val equal : 'BatOrd.eq -> 'a array BatOrd.eq
      module Exceptionless :
        sig
          val find : ('-> bool) -> 'a t -> 'a option
          val findi : ('-> bool) -> 'a t -> int option
        end
      module Labels :
        sig
          val init : int -> f:(int -> 'a) -> 'a array
          val create : int -> init:'-> 'a array
          val make_matrix : dimx:int -> dimy:int -> '-> 'a array array
          val create_matrix : dimx:int -> dimy:int -> '-> 'a array array
          val sub : 'a array -> pos:int -> len:int -> 'a array
          val fill : 'a array -> pos:int -> len:int -> '-> unit
          val blit :
            src:'a array ->
            src_pos:int -> dst:'a array -> dst_pos:int -> len:int -> unit
          val iter : f:('-> unit) -> 'a array -> unit
          val iteri : f:(int -> '-> unit) -> 'a array -> unit
          val modify : f:('-> 'a) -> 'a array -> unit
          val modifyi : f:(int -> '-> 'a) -> 'a array -> unit
          val fold_left : f:('-> '-> 'a) -> init:'-> 'b array -> 'a
          val fold_right : f:('-> '-> 'a) -> 'b array -> init:'-> 'a
          val sort : cmp:('-> '-> int) -> 'a array -> unit
          val stable_sort : cmp:('-> '-> int) -> 'a array -> unit
          val fast_sort : cmp:('-> '-> int) -> 'a array -> unit
          val iter2 : f:('-> '-> unit) -> 'a t -> 'b t -> unit
          val exists : f:('-> bool) -> 'a t -> bool
          val for_all : f:('-> bool) -> 'a t -> bool
          val iter2i : f:(int -> '-> '-> unit) -> 'a t -> 'b t -> unit
          val find : f:('-> bool) -> 'a t -> 'a
          val findi : f:('-> bool) -> 'a t -> int
          val map : f:('-> 'b) -> 'a t -> 'b t
          val mapi : f:(int -> '-> 'b) -> 'a t -> 'b t
          val filter : f:('-> bool) -> 'a t -> 'a t
          val filter_map : f:('-> 'b option) -> 'a t -> 'b t
          module LExceptionless :
            sig
              val find : f:('-> bool) -> 'a t -> 'a option
              val findi : f:('-> bool) -> 'a t -> int option
            end
        end
      module Cap :
        sig
          type ('a, 'b) t = ('a, 'b) BatArray.Cap.t
            constraint 'b = [< `Read | `Write ]
          external length : ('a, [< `Read | `Write ]) t -> int
            = "%array_length"
          external get : ('a, [< `Read | `Write > `Read ]) t -> int -> 'a
            = "%array_safe_get"
          external set :
            ('a, [< `Read | `Write > `Write ]) t -> int -> '-> unit
            = "%array_safe_set"
          external make : int -> '-> ('a, [< `Read | `Write ]) t
            = "caml_make_vect"
          external create : int -> '-> ('a, [< `Read | `Write ]) t
            = "caml_make_vect"
          external of_array : 'a array -> ('a, [< `Read | `Write ]) t
            = "%identity"
          external to_array : ('a, [ `Read | `Write ]) t -> 'a array
            = "%identity"
          external read_only :
            ('a, [< `Read | `Write > `Read ]) t -> ('a, [ `Read ]) t
            = "%identity"
          external write_only :
            ('a, [< `Read | `Write > `Write ]) t -> ('a, [ `Write ]) t
            = "%identity"
          val init : int -> (int -> 'a) -> ('a, [< `Read | `Write ]) t
          val make_matrix :
            int ->
            int -> '-> (('a, [< `Read | `Write ]) t, [< `Read | `Write ]) t
          val create_matrix :
            int ->
            int -> '-> (('a, [< `Read | `Write ]) t, [< `Read | `Write ]) t
          val iter :
            ('-> unit) -> ('a, [< `Read | `Write > `Read ]) t -> unit
          val map :
            ('-> 'b) ->
            ('a, [< `Read | `Write > `Read ]) t ->
            ('b, [< `Read | `Write ]) t
          val iteri :
            (int -> '-> unit) ->
            ('a, [< `Read | `Write > `Read ]) t -> unit
          val mapi :
            (int -> '-> 'b) ->
            ('a, [< `Read | `Write > `Read ]) t ->
            ('b, [< `Read | `Write ]) t
          val modify : ('-> 'a) -> ('a, [ `Read | `Write ]) t -> unit
          val modifyi :
            (int -> '-> 'a) -> ('a, [ `Read | `Write ]) t -> unit
          val fold_left :
            ('-> '-> 'a) ->
            '-> ('b, [< `Read | `Write > `Read ]) t -> 'a
          val fold_right :
            ('-> '-> 'a) ->
            ('b, [< `Read | `Write > `Read ]) t -> '-> 'a
          val iter2 :
            ('-> '-> unit) ->
            ('a, [< `Read | `Write > `Read ]) t ->
            ('b, [< `Read | `Write > `Read ]) t -> unit
          val iter2i :
            (int -> '-> '-> unit) ->
            ('a, [< `Read | `Write > `Read ]) t ->
            ('b, [< `Read | `Write > `Read ]) t -> unit
          val for_all :
            ('-> bool) -> ('a, [< `Read | `Write > `Read ]) t -> bool
          val exists :
            ('-> bool) -> ('a, [< `Read | `Write > `Read ]) t -> bool
          val find :
            ('-> bool) -> ('a, [< `Read | `Write > `Read ]) t -> 'a
          val mem : '-> ('a, [< `Read | `Write > `Read ]) t -> bool
          val memq : '-> ('a, [< `Read | `Write > `Read ]) t -> bool
          val findi :
            ('-> bool) -> ('a, [< `Read | `Write > `Read ]) t -> int
          val filter :
            ('-> bool) ->
            ('a, [< `Read | `Write > `Read ]) t ->
            ('a, [< `Read | `Write ]) t
          val filter_map :
            ('-> 'b option) ->
            ('a, [< `Read | `Write > `Read ]) t ->
            ('b, [< `Read | `Write ]) t
          val find_all :
            ('-> bool) ->
            ('a, [< `Read | `Write > `Read ]) t ->
            ('a, [< `Read | `Write ]) t
          val partition :
            ('-> bool) ->
            ('a, [< `Read | `Write > `Read ]) t ->
            ('a, [< `Read | `Write ]) t * ('a, [< `Read | `Write ]) t
          val rev :
            ('a, [< `Read | `Write > `Read ]) t ->
            ('a, [< `Read | `Write ]) t
          val rev_in_place : ('a, [ `Read | `Write ]) t -> unit
          val append :
            ('a, [< `Read | `Write > `Read ]) t ->
            ('a, [< `Read | `Write > `Read ]) t ->
            ('a, [< `Read | `Write ]) t
          val concat :
            ('a, [< `Read | `Write > `Read ]) t list ->
            ('a, [< `Read | `Write ]) t
          val sub :
            ('a, [< `Read | `Write > `Read ]) t ->
            int -> int -> ('a, [< `Read | `Write ]) t
          val copy : ('a, [< `Read | `Write > `Read ]) t -> 'a array
          val fill :
            ('a, [< `Read | `Write > `Write ]) t -> int -> int -> '-> unit
          val blit :
            ('a, [< `Read | `Write > `Read ]) t ->
            int -> ('a, [< `Read | `Write > `Write ]) t -> int -> int -> unit
          val enum : ('a, [< `Read | `Write > `Read ]) t -> 'BatEnum.t
          val of_enum : 'BatEnum.t -> ('a, [< `Read | `Write ]) t
          val backwards : ('a, [< `Read | `Write > `Read ]) t -> 'BatEnum.t
          val of_backwards : 'BatEnum.t -> ('a, [< `Read | `Write ]) t
          val to_list : ('a, [< `Read | `Write > `Read ]) t -> 'a list
          val of_list : 'a list -> ('a, [< `Read | `Write ]) t
          val sort : ('-> '-> int) -> ('a, [ `Read | `Write ]) t -> unit
          val stable_sort :
            ('-> '-> int) -> ('a, [ `Read | `Write ]) t -> unit
          val fast_sort :
            ('-> '-> int) -> ('a, [ `Read | `Write ]) t -> unit
          val print :
            ?first:string ->
            ?last:string ->
            ?sep:string ->
            ('BatIO.output -> '-> unit) ->
            'BatIO.output -> ('b, [< `Read | `Write > `Read ]) t -> unit
          val compare :
            'BatOrd.comp -> ('a, [< `Read | `Write > `Read ]) t BatOrd.comp
          val ord :
            'BatOrd.ord -> ('a, [< `Read | `Write > `Read ]) t BatOrd.ord
          val equal :
            'BatOrd.eq -> ('a, [< `Read | `Write > `Read ]) t BatOrd.eq
          module Exceptionless :
            sig
              val find :
                ('-> bool) ->
                ('a, [< `Read | `Write > `Read ]) t -> 'a option
              val findi :
                ('-> bool) ->
                ('a, [< `Read | `Write > `Read ]) t -> int option
            end
          module Labels :
            sig
              val init : int -> f:(int -> 'a) -> ('a, [< `Read | `Write ]) t
              val make : int -> init:'-> ('a, [< `Read | `Write ]) t
              val create : int -> init:'-> ('a, [< `Read | `Write ]) t
              val make_matrix :
                dimx:int ->
                dimy:int ->
                '-> (('a, [< `Read | `Write ]) t, [< `Read | `Write ]) t
              val create_matrix :
                dimx:int ->
                dimy:int ->
                '-> (('a, [< `Read | `Write ]) t, [< `Read | `Write ]) t
              val sub :
                ('a, [< `Read | `Write > `Read ]) t ->
                pos:int -> len:int -> ('a, [< `Read | `Write ]) t
              val fill :
                ('a, [< `Read | `Write > `Write ]) t ->
                pos:int -> len:int -> '-> unit
              val blit :
                src:('a, [< `Read | `Write > `Read ]) t ->
                src_pos:int ->
                dst:('a, [< `Read | `Write > `Write ]) t ->
                dst_pos:int -> len:int -> unit
              val iter :
                f:('-> unit) -> ('a, [< `Read | `Write > `Read ]) t -> unit
              val iteri :
                f:(int -> '-> unit) ->
                ('a, [< `Read | `Write > `Read ]) t -> unit
              val modify : f:('-> 'a) -> ('a, [ `Read | `Write ]) t -> unit
              val modifyi :
                f:(int -> '-> 'a) -> ('a, [ `Read | `Write ]) t -> unit
              val fold_left :
                f:('-> '-> 'a) ->
                init:'-> ('b, [< `Read | `Write > `Read ]) t -> 'a
              val fold_right :
                f:('-> '-> 'a) ->
                ('b, [< `Read | `Write > `Read ]) t -> init:'-> 'a
              val sort :
                cmp:('-> '-> int) -> ('a, [ `Read | `Write ]) t -> unit
              val stable_sort :
                cmp:('-> '-> int) -> ('a, [ `Read | `Write ]) t -> unit
              val fast_sort :
                cmp:('-> '-> int) -> ('a, [ `Read | `Write ]) t -> unit
              val iter2 :
                f:('-> '-> unit) ->
                ('a, [< `Read | `Write > `Read ]) t ->
                ('b, [< `Read | `Write > `Read ]) t -> unit
              val iter2i :
                f:(int -> '-> '-> unit) ->
                ('a, [< `Read | `Write > `Read ]) t ->
                ('b, [< `Read | `Write > `Read ]) t -> unit
              val exists :
                f:('-> bool) -> ('a, [< `Read | `Write > `Read ]) t -> bool
              val for_all :
                f:('-> bool) -> ('a, [< `Read | `Write > `Read ]) t -> bool
              val find :
                f:('-> bool) -> ('a, [< `Read | `Write > `Read ]) t -> 'a
              val map :
                f:('-> 'b) ->
                ('a, [< `Read | `Write > `Read ]) t ->
                ('b, [< `Read | `Write ]) t
              val mapi :
                f:(int -> '-> 'b) ->
                ('a, [< `Read | `Write > `Read ]) t ->
                ('b, [< `Read | `Write ]) t
              val filter :
                f:('-> bool) ->
                ('a, [< `Read | `Write > `Read ]) t ->
                ('a, [< `Read | `Write ]) t
              val filter_map :
                f:('-> 'b option) ->
                ('a, [< `Read | `Write > `Read ]) t ->
                ('b, [< `Read | `Write ]) t
            end
          external unsafe_get :
            ('a, [< `Read | `Write > `Read ]) t -> int -> 'a
            = "%array_unsafe_get"
          external unsafe_set :
            ('a, [< `Read | `Write > `Write ]) t -> int -> '-> unit
            = "%array_unsafe_set"
        end
      module Incubator :
        sig
          module Eq :
            functor (T : BatOrd.Eq->
              sig type t = T.t array val eq : T.t array BatOrd.eq end
          module Ord :
            functor (T : BatOrd.Ord->
              sig type t = T.t array val ord : T.t array BatOrd.ord end
        end
      val is_sorted_by : ('-> 'b) -> 'a array -> bool
      external unsafe_get : 'a array -> int -> 'a = "%array_unsafe_get"
      external unsafe_set : 'a array -> int -> '-> unit
        = "%array_unsafe_set"
    end
end