sig
  external length : 'a array -> int = "%array_length"
  external size : 'a array -> int = "%array_length"
  val get : 'a array -> int -> 'a option
  val getExn : 'a array -> int -> 'a
  external getUnsafe : 'a array -> int -> 'a = "%array_unsafe_get"
  external getUndefined : 'a array -> int -> 'Js.undefined
    = "%array_unsafe_get"
  val set : 'a array -> int -> '-> bool
  val setExn : 'a array -> int -> '-> unit
  external setUnsafe : 'a array -> int -> '-> unit = "%array_unsafe_set"
  val shuffleInPlace : 'a array -> unit
  val shuffle : 'a array -> 'a array
  val reverseInPlace : 'a array -> unit
  val reverse : 'a array -> 'a array
  external makeUninitialized : int -> 'Js.undefined array = "Array"
    "BS-EXTERNAL"
  external makeUninitializedUnsafe : int -> 'a array = "Array" "BS-EXTERNAL"
  val make : int -> '-> 'a array
  val range : int -> int -> int array
  val rangeBy : int -> int -> step:int -> int array
  val makeByU : int -> (int -> 'a [@bs]) -> 'a array
  val makeBy : int -> (int -> 'a) -> 'a array
  val makeByAndShuffleU : int -> (int -> 'a [@bs]) -> 'a array
  val makeByAndShuffle : int -> (int -> 'a) -> 'a array
  val zip : 'a array -> 'b array -> ('a * 'b) array
  val zipByU : 'a array -> 'b array -> ('-> '-> 'c [@bs]) -> 'c array
  val zipBy : 'a array -> 'b array -> ('-> '-> 'c) -> 'c array
  val unzip : ('a * 'b) array -> 'a array * 'b array
  val concat : 'a array -> 'a array -> 'a array
  val concatMany : 'a array array -> 'a array
  val slice : 'a array -> offset:int -> len:int -> 'a array
  val sliceToEnd : 'a array -> int -> 'a array
  external copy : 'a array -> 'a array = "slice" "BS-EXTERNAL"
  val fill : 'a array -> offset:int -> len:int -> '-> unit
  val blit :
    src:'a array ->
    srcOffset:int -> dst:'a array -> dstOffset:int -> len:int -> unit
  val blitUnsafe :
    src:'a array ->
    srcOffset:int -> dst:'a array -> dstOffset:int -> len:int -> unit
  val forEachU : 'a array -> ('-> unit [@bs]) -> unit
  val forEach : 'a array -> ('-> unit) -> unit
  val mapU : 'a array -> ('-> 'b [@bs]) -> 'b array
  val map : 'a array -> ('-> 'b) -> 'b array
  val getByU : 'a array -> ('-> bool [@bs]) -> 'a option
  val getBy : 'a array -> ('-> bool) -> 'a option
  val getIndexByU : 'a array -> ('-> bool [@bs]) -> int option
  val getIndexBy : 'a array -> ('-> bool) -> int option
  val keepU : 'a array -> ('-> bool [@bs]) -> 'a array
  val keep : 'a array -> ('-> bool) -> 'a array
  val keepWithIndexU : 'a array -> ('-> int -> bool [@bs]) -> 'a array
  val keepWithIndex : 'a array -> ('-> int -> bool) -> 'a array
  val keepMapU : 'a array -> ('-> 'b option [@bs]) -> 'b array
  val keepMap : 'a array -> ('-> 'b option) -> 'b array
  val forEachWithIndexU : 'a array -> (int -> '-> unit [@bs]) -> unit
  val forEachWithIndex : 'a array -> (int -> '-> unit) -> unit
  val mapWithIndexU : 'a array -> (int -> '-> 'b [@bs]) -> 'b array
  val mapWithIndex : 'a array -> (int -> '-> 'b) -> 'b array
  val partitionU : 'a array -> ('-> bool [@bs]) -> 'a array * 'a array
  val partition : 'a array -> ('-> bool) -> 'a array * 'a array
  val reduceU : 'b array -> '-> ('-> '-> 'a [@bs]) -> 'a
  val reduce : 'b array -> '-> ('-> '-> 'a) -> 'a
  val reduceReverseU : 'b array -> '-> ('-> '-> 'a [@bs]) -> 'a
  val reduceReverse : 'b array -> '-> ('-> '-> 'a) -> 'a
  val reduceReverse2U :
    'a array -> 'b array -> '-> ('-> '-> '-> 'c [@bs]) -> 'c
  val reduceReverse2 :
    'a array -> 'b array -> '-> ('-> '-> '-> 'c) -> 'c
  val reduceWithIndexU :
    'a array -> '-> ('-> '-> int -> 'b [@bs]) -> 'b
  val reduceWithIndex : 'a array -> '-> ('-> '-> int -> 'b) -> 'b
  val someU : 'a array -> ('-> bool [@bs]) -> bool
  val some : 'a array -> ('-> bool) -> bool
  val everyU : 'a array -> ('-> bool [@bs]) -> bool
  val every : 'a array -> ('-> bool) -> bool
  val every2U : 'a array -> 'b array -> ('-> '-> bool [@bs]) -> bool
  val every2 : 'a array -> 'b array -> ('-> '-> bool) -> bool
  val some2U : 'a array -> 'b array -> ('-> '-> bool [@bs]) -> bool
  val some2 : 'a array -> 'b array -> ('-> '-> bool) -> bool
  val cmpU : 'a array -> 'a array -> ('-> '-> int [@bs]) -> int
  val cmp : 'a array -> 'a array -> ('-> '-> int) -> int
  val eqU : 'a array -> 'a array -> ('-> '-> bool [@bs]) -> bool
  val eq : 'a array -> 'a array -> ('-> '-> bool) -> bool
  external truncateToLengthUnsafe : 'a array -> int -> unit = "length"
    "BS-EXTERNAL"
end