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 iteri :
    f:(int -> '-> unit) ->
    ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> unit
  val modify :
    f:('-> 'a) -> ('a, [ `Read | `Write ]) BatArray.Cap.t -> unit
  val modifyi :
    f:(int -> '-> 'a) -> ('a, [ `Read | `Write ]) BatArray.Cap.t -> unit
  val fold_left :
    f:('-> '-> 'a) ->
    init:'-> ('b, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'a
  val fold :
    f:('-> '-> 'a) ->
    init:'-> ('b, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'a
  val fold_right :
    f:('-> '-> 'a) ->
    ('b, [< `Read | `Write > `Read ]) BatArray.Cap.t -> init:'-> 'a
  val fold_while :
    p:('acc -> '-> bool) ->
    f:('acc -> '-> 'acc) -> init:'acc -> 'a array -> 'acc * int
  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 find_opt :
    f:('-> bool) ->
    ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'a option
  val find_map :
    f:('-> 'b option) ->
    ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> 'b option
  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
  val count_matching :
    f:('-> bool) -> ('a, [< `Read | `Write > `Read ]) BatArray.Cap.t -> int
end