sig
  type 'a t = 'a array
  type 'a enumerable = 'a t
  val enum : 'a enumerable -> 'BatEnum.t
  val of_enum : 'BatEnum.t -> 'a enumerable
  type 'a mappable = 'a t
  val map : ('-> 'b) -> 'a mappable -> 'b mappable
  val fold_lefti : ('-> int -> '-> 'a) -> '-> 'b array -> 'a
  val reduce : ('-> '-> 'a) -> 'a array -> 'a
  val max : 'a array -> 'a
  val min : 'a array -> 'a
  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 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 make_compare : ('-> '-> int) -> 'a array -> 'a array -> int
  val decorate_stable_sort : ('-> 'b) -> 'a array -> 'a array
  val decorate_fast_sort : ('-> 'b) -> 'a array -> 'a array
  val range : 'a array -> int BatEnum.t
  val print :
    ?first:string ->
    ?last:string ->
    ?sep:string ->
    ('BatIO.output -> '-> unit) -> 'BatIO.output -> 'b t -> unit
  val sprint :
    ?first:string ->
    ?last:string ->
    ?sep:string -> ('BatIO.output -> '-> unit) -> 'b t -> string
  val t_printer : 'BatValue_printer.t -> 'BatArray.t BatValue_printer.t
  module Cap :
    sig
      type ('a, 'b) t constraint 'b = [< `Read | `Write ]
      external length : ('a, [< `Read | `Write ]) BatArray.Cap.t -> int
        = "%array_length"
      external get :
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> int -> 'a
        = "%array_safe_get"
      external set :
        ('a, [< `Read | `Write > `Write ]) BatArray.Cap.t ->
        int -> '-> unit = "%array_safe_set"
      external make : int -> '-> ('a, [< `Read | `Write ]) BatArray.Cap.t
        = "caml_make_vect"
      external create : int -> '-> ('a, [< `Read | `Write ]) BatArray.Cap.t
        = "caml_make_vect"
      external of_array :
        'a array -> ('a, [< `Read | `Write ]) BatArray.Cap.t = "%identity"
      external to_array : ('a, [ `Read | `Write ]) BatArray.Cap.t -> 'a array
        = "%identity"
      external read_only :
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        ('a, [ `Read ]) BatArray.Cap.t = "%identity"
      external write_only :
        ('a, [< `Read | `Write > `Write ]) BatArray.Cap.t ->
        ('a, [ `Write ]) BatArray.Cap.t = "%identity"
      val init :
        int -> (int -> 'a) -> ('a, [< `Read | `Write ]) BatArray.Cap.t
      val make_matrix :
        int ->
        int ->
        '->
        (('a, [< `Read | `Write ]) BatArray.Cap.t, [< `Read | `Write ])
        BatArray.Cap.t
      val create_matrix :
        int ->
        int ->
        '->
        (('a, [< `Read | `Write ]) BatArray.Cap.t, [< `Read | `Write ])
        BatArray.Cap.t
      val iter :
        ('-> unit) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> unit
      val map :
        ('-> 'b) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        ('b, [< `Read | `Write ]) BatArray.Cap.t
      val iteri :
        (int -> '-> unit) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> unit
      val mapi :
        (int -> '-> 'b) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        ('b, [< `Read | `Write ]) BatArray.Cap.t
      val fold_left :
        ('-> '-> 'a) ->
        '-> ('b, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'a
      val fold_right :
        ('-> '-> 'b) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> '-> 'b
      val iter2 :
        ('-> '-> unit) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        ('b, [< `Read | `Write > `Read ]) BatArray.Cap.t -> unit
      val iter2i :
        (int -> '-> '-> unit) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        ('b, [< `Read | `Write > `Read ]) BatArray.Cap.t -> unit
      val for_all :
        ('-> bool) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> bool
      val exists :
        ('-> bool) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> bool
      val find :
        ('-> bool) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'a
      val mem :
        '-> ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> bool
      val memq :
        '-> ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> bool
      val findi :
        ('-> bool) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> int
      val filter :
        ('-> bool) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        ('a, [< `Read | `Write ]) BatArray.Cap.t
      val filter_map :
        ('-> 'b option) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        ('b, [< `Read | `Write ]) BatArray.Cap.t
      val find_all :
        ('-> bool) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        ('a, [< `Read | `Write ]) BatArray.Cap.t
      val partition :
        ('-> bool) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        ('a, [< `Read | `Write ]) BatArray.Cap.t *
        ('a, [< `Read | `Write ]) BatArray.Cap.t
      val rev :
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        ('a, [< `Read | `Write ]) BatArray.Cap.t
      val rev_in_place : ('a, [ `Read | `Write ]) BatArray.Cap.t -> unit
      val append :
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        ('a, [< `Read | `Write ]) BatArray.Cap.t
      val concat :
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t list ->
        ('a, [< `Read | `Write ]) BatArray.Cap.t
      val sub :
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        int -> int -> ('a, [< `Read | `Write ]) BatArray.Cap.t
      val copy : ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'a array
      val fill :
        ('a, [< `Read | `Write > `Write ]) BatArray.Cap.t ->
        int -> int -> '-> unit
      val blit :
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        int ->
        ('a, [< `Read | `Write > `Write ]) BatArray.Cap.t ->
        int -> int -> unit
      val enum :
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'BatEnum.t
      val of_enum : 'BatEnum.t -> ('a, [< `Read | `Write ]) BatArray.Cap.t
      val backwards :
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'BatEnum.t
      val of_backwards :
        'BatEnum.t -> ('a, [< `Read | `Write ]) BatArray.Cap.t
      val to_list :
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'a list
      val of_list : 'a list -> ('a, [< `Read | `Write ]) BatArray.Cap.t
      val make_compare :
        ('-> '-> int) ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> int
      val sort :
        ('-> '-> int) -> ('a, [ `Read | `Write ]) BatArray.Cap.t -> unit
      val stable_sort :
        ('-> '-> int) -> ('a, [ `Read | `Write ]) BatArray.Cap.t -> unit
      val fast_sort :
        ('-> '-> int) -> ('a, [ `Read | `Write ]) BatArray.Cap.t -> unit
      val print :
        ?first:string ->
        ?last:string ->
        ?sep:string ->
        ('BatIO.output -> '-> unit) ->
        'BatIO.output ->
        ('b, [< `Read | `Write > `Read ]) BatArray.Cap.t -> unit
      val sprint :
        ?first:string ->
        ?last:string ->
        ?sep:string ->
        ('BatIO.output -> '-> unit) ->
        ('b, [< `Read | `Write > `Read ]) BatArray.Cap.t -> string
      external unsafe_get :
        ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> int -> 'a
        = "%array_unsafe_get"
      external unsafe_set :
        ('a, [< `Read | `Write > `Write ]) BatArray.Cap.t ->
        int -> '-> unit = "%array_unsafe_set"
      module Exceptionless :
        sig
          val find :
            ('-> bool) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'a option
          val findi :
            ('-> bool) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> int option
        end
      module Labels :
        sig
          val init :
            int -> f:(int -> 'a) -> ('a, [< `Read | `Write ]) BatArray.Cap.t
          val make :
            int -> init:'-> ('a, [< `Read | `Write ]) BatArray.Cap.t
          val create :
            int -> init:'-> ('a, [< `Read | `Write ]) BatArray.Cap.t
          val make_matrix :
            dimx:int ->
            dimy:int ->
            '->
            (('a, [< `Read | `Write ]) BatArray.Cap.t, [< `Read | `Write ])
            BatArray.Cap.t
          val create_matrix :
            dimx:int ->
            dimy:int ->
            '->
            (('a, [< `Read | `Write ]) BatArray.Cap.t, [< `Read | `Write ])
            BatArray.Cap.t
          val sub :
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
            pos:int -> len:int -> ('a, [< `Read | `Write ]) BatArray.Cap.t
          val fill :
            ('a, [< `Read | `Write > `Write ]) BatArray.Cap.t ->
            pos:int -> len:int -> '-> unit
          val blit :
            src:('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
            src_pos:int ->
            dst:('a, [< `Read | `Write > `Write ]) BatArray.Cap.t ->
            dst_pos:int -> len:int -> unit
          val iter :
            f:('-> unit) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> unit
          val map :
            f:('-> 'b) ->
            ('a, [< `Read | `Write > `Read ]) t ->
            ('b, [< `Read | `Write ]) t
          val iteri :
            f:(int -> '-> unit) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> unit
          val mapi :
            f:(int -> '-> 'b) ->
            ('a, [< `Read | `Write > `Read ]) t ->
            ('b, [< `Read | `Write ]) t
          val fold_left :
            f:('-> '-> 'a) ->
            init:'-> ('b, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'a
          val fold_right :
            f:('-> '-> 'b) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> init:'-> 'b
          val sort :
            cmp:('-> '-> int) ->
            ('a, [ `Read | `Write ]) BatArray.Cap.t -> unit
          val stable_sort :
            cmp:('-> '-> int) ->
            ('a, [ `Read | `Write ]) BatArray.Cap.t -> unit
          val fast_sort :
            cmp:('-> '-> int) ->
            ('a, [ `Read | `Write ]) BatArray.Cap.t -> unit
          val iter2 :
            f:('-> '-> unit) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
            ('b, [< `Read | `Write > `Read ]) BatArray.Cap.t -> unit
          val iter2i :
            f:(int -> '-> '-> unit) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
            ('b, [< `Read | `Write > `Read ]) BatArray.Cap.t -> unit
          val exists :
            f:('-> bool) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> bool
          val for_all :
            f:('-> bool) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> bool
          val find :
            f:('-> bool) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'a
          val map :
            f:('-> 'b) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
            ('b, [< `Read | `Write ]) BatArray.Cap.t
          val mapi :
            f:(int -> '-> 'b) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
            ('b, [< `Read | `Write ]) BatArray.Cap.t
          val filter :
            f:('-> bool) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
            ('a, [< `Read | `Write ]) BatArray.Cap.t
          val filter_map :
            f:('-> 'b option) ->
            ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t ->
            ('b, [< `Read | `Write ]) BatArray.Cap.t
        end
    end
  val print :
    ?first:string ->
    ?last:string ->
    ?sep:string ->
    ('BatIO.output -> '-> unit) ->
    'BatIO.output -> 'BatArray.t -> unit
  val sprint :
    ?first:string ->
    ?last:string ->
    ?sep:string -> ('BatIO.output -> '-> unit) -> 'BatArray.t -> string
  module Exceptionless :
    sig
      val find : ('-> bool) -> 'BatArray.t -> 'a option
      val findi : ('-> bool) -> 'BatArray.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 map : f:('-> 'b) -> 'a array -> 'b array
      val iteri : f:(int -> '-> unit) -> 'a array -> unit
      val mapi : f:(int -> '-> 'b) -> 'a array -> 'b array
      val fold_left : f:('-> '-> 'a) -> init:'-> 'b array -> 'a
      val fold_right : f:('-> '-> 'b) -> 'a array -> init:'-> 'b
      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) -> 'BatArray.t -> 'BatArray.t -> unit
      val exists : f:('-> bool) -> 'BatArray.t -> bool
      val for_all : f:('-> bool) -> 'BatArray.t -> bool
      val iter2i :
        f:(int -> '-> '-> unit) -> 'BatArray.t -> 'BatArray.t -> unit
      val find : f:('-> bool) -> 'BatArray.t -> 'a
      val findi : f:('-> bool) -> 'BatArray.t -> int
      val map : f:('-> 'b) -> 'BatArray.t -> 'BatArray.t
      val mapi : f:(int -> '-> 'b) -> 'BatArray.t -> 'BatArray.t
      val filter : f:('-> bool) -> 'BatArray.t -> 'BatArray.t
      val filter_map : f:('-> 'b option) -> 'BatArray.t -> 'BatArray.t
      module LExceptionless :
        sig
          val find : f:('-> bool) -> 'BatArray.t -> 'a option
          val findi : f:('-> bool) -> 'BatArray.t -> int option
        end
    end
end