sig
  module Strategy :
    sig
      type t = float * float * int
      val default : t
      val grow : t -> int -> int
      val shrink : t -> real_len:int -> new_len:int -> int
    end
  type strategy = Strategy.t
  type 'a t
  val length : 'a t -> int
  val lix : 'a t -> int
  val real_length : 'a t -> int
  val real_lix : 'a t -> int
  val get : 'a t -> int -> 'a option
  val get_copy : 'a t -> int -> 'a option
  val check : 'a t -> int -> bool
  val set : 'a t -> int -> 'a option -> unit
  val sempty : strategy -> 'a t
  val empty : unit -> 'a t
  val screate : strategy -> int -> 'a t
  val create : int -> 'a t
  val sinit : strategy -> int -> (int -> 'a option) -> 'a t
  val init : int -> (int -> 'a option) -> 'a t
  val get_strategy : 'a t -> strategy
  val set_strategy : 'a t -> strategy -> unit
  val put_strategy : 'a t -> strategy -> unit
  val enforce_strategy : 'a t -> unit
  val copy : 'a t -> 'a t
  val sub : 'a t -> int -> int -> 'a t
  val fill : 'a t -> int -> int -> 'a option -> unit
  val blit : 'a t -> int -> 'a t -> int -> int -> unit
  val append : 'a t -> 'a t -> 'a t
  val concat : 'a t list -> 'a t
  val add_one : 'a t -> 'a option -> unit
  val remove_one : 'a t -> unit
  val remove_n : 'a t -> int -> unit
  val remove_range : 'a t -> int -> int -> unit
  val clear : 'a t -> unit
  val swap : 'a t -> int -> int -> unit
  val swap_in_last : 'a t -> int -> unit
  val to_std : 'a t -> 'Weak.t
  val sof_std : strategy -> 'Weak.t -> 'a t
  val of_std : 'Weak.t -> 'a t
  val to_list : 'a t -> 'a option list
  val of_list : 'a option list -> 'a t
  val iter : ('a option -> unit) -> 'a t -> unit
  val iteri : (int -> 'a option -> unit) -> 'a t -> unit
  val fold_left : ('-> 'a option -> 'b) -> '-> 'a t -> 'b
  val fold_right : ('a option -> '-> 'b) -> 'a t -> '-> 'b
  val for_all : ('a option -> bool) -> 'a t -> bool
  val exists : ('a option -> bool) -> 'a t -> bool
  val mem : 'a option -> 'a t -> bool
  val memq : 'a option -> 'a t -> bool
  val pos : 'a option -> 'a t -> int option
  val posq : 'a option -> 'a t -> int option
  val find : ('a option -> bool) -> 'a t -> 'a option
  val find_index : ('a option -> bool) -> 'a t -> int -> int
  val filter : ('a option -> bool) -> 'a t -> 'a t
  val find_all : ('a option -> bool) -> 'a t -> 'a t
  val filter_in_place : ('a option -> bool) -> 'a t -> unit
  val partition : ('a option -> bool) -> 'a t -> 'a t * 'a t
  val unsafe_get : 'a t -> int -> 'a option
  val unsafe_set : 'a t -> int -> 'a option -> unit
  val unsafe_sub : 'a t -> int -> int -> 'a t
  val unsafe_fill : 'a t -> int -> int -> 'a option -> unit
  val unsafe_blit : 'a t -> int -> 'a t -> int -> int -> unit
  val unsafe_remove_one : 'a t -> unit
  val unsafe_remove_n : 'a t -> int -> unit
  val unsafe_swap : 'a t -> int -> int -> unit
  val unsafe_swap_in_last : 'a t -> int -> unit
end