sig
  external length : 'a array -> int = "%array_length"
  external get : 'a array -> int -> 'a = "%array_safe_get"
  external set : 'a array -> int -> 'a -> unit = "%array_safe_set"
  external make : int -> 'a -> 'a array = "caml_make_vect"
  external create : int -> 'a -> 'a array = "caml_make_vect"
  val init : int -> (int -> 'a) -> 'a array
  val make_matrix : int -> int -> 'a -> 'a array array
  val create_matrix : int -> int -> 'a -> '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 -> 'a -> 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 : ('a -> unit) -> 'a array -> unit
  val map : ('a -> 'b) -> 'a array -> 'b array
  val iteri : (int -> 'a -> unit) -> 'a array -> unit
  val mapi : (int -> 'a -> 'b) -> 'a array -> 'b array
  val fold_left : ('a -> 'b -> 'a) -> 'a -> 'b array -> 'a
  val fold_right : ('a -> 'b -> 'b) -> 'a array -> 'b -> 'b
  val sort : ('a -> 'a -> int) -> 'a array -> unit
  val stable_sort : ('a -> 'a -> int) -> 'a array -> unit
  val fast_sort : ('a -> 'a -> int) -> 'a array -> unit
  external unsafe_get : 'a array -> int -> 'a = "%array_unsafe_get"
  external unsafe_set : 'a array -> int -> 'a -> unit = "%array_unsafe_set"
  type 'a t = 'a array
  val map_to_list : ('a -> 'b) -> 'a array -> 'b list
  val map2_to_list : ('a -> 'b -> 'c) -> 'a array -> 'b array -> 'c list
  val index_opt : ('a -> bool) -> 'a array -> int option
  val map_filter : ('a -> 'b option) -> 'a array -> 'b array
  val findi_opt : ('a -> bool) -> 'a array -> (int * 'a) option
  val eqlen : string -> 'a array -> 'b array -> int
  val map2 : ('a -> 'b -> 'c) -> 'a array -> 'b array -> 'c array
  val mapi2 : (int -> 'a -> 'b -> 'c) -> 'a array -> 'b array -> 'c array
  val iter2 : ('a -> 'b -> 'c) -> 'a array -> 'b array -> unit
  val iteri2 : (int -> 'a -> 'b -> 'c) -> 'a array -> 'b array -> unit
  val findi_all : ('a -> bool) -> 'a array -> (int * 'a) list
  val dump : t:< show : 'a -> string; .. > -> 'a array -> string
  module Build :
    sig
      type 'a t = 'a Cd_Array.Array.Build.t
      val create : unit -> 'a t
      val add : 'a -> 'a t -> unit
      val get : 'a t -> 'a array
    end
  module BuildSized :
    sig
      type 'a t = 'a Cd_Array.Array.BuildSized.t
      val create : size:int -> 'a t
      val add : 'a -> 'a t -> unit
      val get : 'a t -> 'a array
    end
  val for_all : ('a -> bool) -> 'a array -> bool
  module BuildSizedRandAcc :
    sig
      type 'a t = 'a Cd_Array.Array.BuildSizedRandAcc.t
      val create : size:int -> 'a t
      val set : 'a t -> int -> 'a -> unit
      val get : 'a t -> 'a array
    end
  val arrays_fibration :
    ('a -> 'a -> bool) -> 'a array list -> ('a array * int array) list * int
  val merge_maps :
    ?tikey:'a Cdt.ti ->
    ?tival:'b Cdt.ti ->
    builder:< add : 'c -> 'd -> 'e -> 'c; empty : 'c; result : 'c -> 'f; .. > ->
    keq:('d -> 'd -> bool) ->
    f:[< `Merge_rwm of 'd -> 'g list -> 'h list -> 'e list
       | `Merge_rws of 'd -> 'g option -> 'h option -> 'e option ] ->
    k1:'d array -> v1:'g array -> k2:'d array -> v2:'h array -> unit -> 'f
  val map2to1 : ('a -> 'b -> 'c) -> 'a array -> 'b array -> 'c array
  class ['a] ti :
    ?cmp:('a -> 'a -> Cdt.cmp_res) ->
    ?eq:('a -> 'a -> bool) ->
    ?hash:('a -> int) ->
    ?show:('a -> string) ->
    'b #Cdt.tti ->
    unit ->
    object
      constraint 'a = 'b array
      val v_type_name : Cdt.type_name option ref
      method cmp : 'a -> 'a -> Cdt.cmp_res
      method eq : 'a -> 'a -> bool
      method get_exn : Cdt.ubox -> 'a
      method hash : 'a -> int
      method meths : Cdt.R.meth_table
      method polyapp_Ab : 'c Cdt.polyapp_Ab -> Cdt.ubox -> 'c
      method put_func : 'a -> unit -> unit
      method show : 'a -> string
      method type_desc : Cdt.type_desc
      method type_id : Cdt.Type_id.t
      method type_name : Cdt.type_name
    end
  module GrowingArray :
    sig
      type 'a t = 'a Cd_Array.Array.GrowingArray.t
      val make : int -> 'a -> 'a t
      val request_array : int -> 'a t -> 'a array
    end
  module Functor :
    sig
      type 'a t = 'a array
      val fmap : ('a -> 'b) -> 'a array -> 'b array
    end
end