sig
  type 'a xarray
  type 'a t = 'a Main.Type.XArray.xarray
  val init :
    ?bufsize:int -> int -> 'a -> (int -> 'a) -> 'a Main.Type.XArray.xarray
  val make : ?bufsize:int -> int -> 'a -> 'a Main.Type.XArray.xarray
  val length : 'a Main.Type.XArray.xarray -> int
  val get : 'a Main.Type.XArray.xarray -> int -> 'a
  val set : 'a Main.Type.XArray.xarray -> int -> 'a -> unit
  type index
  val nth : 'a Main.Type.XArray.xarray -> int -> Main.Type.XArray.index
  val first : 'a Main.Type.XArray.xarray -> Main.Type.XArray.index
  val last : 'a Main.Type.XArray.xarray -> Main.Type.XArray.index
  val look : 'a Main.Type.XArray.xarray -> Main.Type.XArray.index -> 'a
  val next :
    'a Main.Type.XArray.t -> Main.Type.XArray.index -> Main.Type.XArray.index
  val prev :
    'a Main.Type.XArray.t -> Main.Type.XArray.index -> Main.Type.XArray.index
  val move :
    'a Main.Type.XArray.t ->
    Main.Type.XArray.index -> int -> Main.Type.XArray.index
  val out_of_range :
    'a Main.Type.XArray.xarray -> Main.Type.XArray.index -> bool
  val compare_index :
    'a Main.Type.XArray.xarray ->
    Main.Type.XArray.index -> Main.Type.XArray.index -> int
  val clear : 'a Main.Type.XArray.xarray -> unit
  val reset : 'a Main.Type.XArray.xarray -> unit
  val copy : 'a Main.Type.XArray.xarray -> 'a Main.Type.XArray.xarray
  val sub :
    'a Main.Type.XArray.xarray -> int -> int -> 'a Main.Type.XArray.xarray
  val add_element : 'a Main.Type.XArray.xarray -> 'a -> unit
  val add_array : 'a Main.Type.XArray.xarray -> 'a array -> unit
  val add_xarray :
    'a Main.Type.XArray.xarray -> 'a Main.Type.XArray.xarray -> unit
  val append :
    'a Main.Type.XArray.xarray ->
    'a Main.Type.XArray.xarray -> 'a Main.Type.XArray.xarray
  val iter : ('a -> unit) -> 'a Main.Type.XArray.xarray -> unit
  val array_of : 'a Main.Type.XArray.xarray -> 'a array
  val shrink : 'a Main.Type.XArray.xarray -> int -> unit
end