sig
  type 'a t = 'a array
  val create : int -> 'a -> 'a array
  val init : int -> (int -> 'a) -> 'a array
  val get : 'a array -> int -> 'a
  val set : 'a array -> int -> 'a -> unit
  val iteri : (int -> 'a -> unit) -> 'a array -> unit
  val map : ('a -> 'b) -> 'a array -> 'b array
  val mapi : (int -> 'a -> 'b) -> 'a array -> 'b array
  val foldi : (int -> 'a -> 'b -> 'b) -> 'a array -> 'b -> 'b
  val fold : ('a -> 'b -> 'b) -> 'a array -> 'b -> 'b
end