functor (S : Strat.T->
  sig
    module Strategy :
      sig
        type t = S.t
        val default : t
        val grow : t -> int -> int
        val shrink : t -> real_len:int -> new_len:int -> int
      end
    type strategy = Weak_impl.Make.Strategy.t
    type 'a t = {
      mutable ar : 'Weak.t;
      mutable vlix : int;
      mutable strategy : Weak_impl.Make.strategy;
    }
    val name : string
    val invalid_arg : string -> 'a
    val failwith : string -> 'a
    val length : 'Weak_impl.Make.t -> int
    val lix : 'Weak_impl.Make.t -> int
    val real_length : 'Weak_impl.Make.t -> int
    val real_lix : 'Weak_impl.Make.t -> int
    val unsafe_get : 'Weak_impl.Make.t -> int -> 'a option
    val unsafe_set : 'Weak_impl.Make.t -> int -> 'a option -> unit
    val check : 'Weak_impl.Make.t -> int -> bool
    val get : 'Weak_impl.Make.t -> int -> 'a option
    val get_copy : 'Weak_impl.Make.t -> int -> 'a option
    val set : 'Weak_impl.Make.t -> int -> 'a option -> unit
    val creator : int -> 'Weak.t
    val screate_fresh : Weak_impl.Make.strategy -> int -> 'Weak_impl.Make.t
    val create_fresh : int -> 'Weak_impl.Make.t
    val create_from : 'Weak_impl.Make.t -> 'Weak_impl.Make.t
    val sempty : Weak_impl.Make.strategy -> 'Weak_impl.Make.t
    val empty : unit -> 'Weak_impl.Make.t
    val smake :
      Weak_impl.Make.strategy -> int -> 'a option -> 'Weak_impl.Make.t
    val make : int -> 'a option -> 'Weak_impl.Make.t
    val create : int -> 'Weak_impl.Make.t
    val screate : Weak_impl.Make.strategy -> int -> 'Weak_impl.Make.t
    val sinit :
      Weak_impl.Make.strategy ->
      int -> (int -> 'a option) -> 'Weak_impl.Make.t
    val init : int -> (int -> 'a option) -> 'Weak_impl.Make.t
    val get_strategy : 'Weak_impl.Make.t -> Weak_impl.Make.strategy
    val resizer : int -> 'Weak_impl.Make.t -> int -> unit
    val enforce_strategy : 'Weak_impl.Make.t -> unit
    val set_strategy : 'Weak_impl.Make.t -> Weak_impl.Make.strategy -> unit
    val put_strategy : 'Weak_impl.Make.t -> Weak_impl.Make.strategy -> unit
    val copy : 'Weak_impl.Make.t -> 'Weak_impl.Make.t
    val unsafe_blit_on_other :
      'Weak_impl.Make.t -> int -> 'Weak_impl.Make.t -> int -> int -> unit
    val append :
      'Weak_impl.Make.t -> 'Weak_impl.Make.t -> 'Weak_impl.Make.t
    val concat_aux :
      'Weak_impl.Make.t ->
      int -> 'Weak_impl.Make.t list -> 'Weak_impl.Make.t
    val concat : 'Weak_impl.Make.t list -> 'Weak_impl.Make.t
    val unsafe_sub : 'Weak_impl.Make.t -> int -> int -> 'Weak_impl.Make.t
    val sub : 'Weak_impl.Make.t -> int -> int -> 'Weak_impl.Make.t
    val guarantee_ix : 'Weak_impl.Make.t -> int -> unit
    val maybe_grow_ix : 'Weak_impl.Make.t -> int -> unit
    val add_one : 'Weak_impl.Make.t -> 'a option -> unit
    val unsafe_remove_one : 'Weak_impl.Make.t -> unit
    val remove_one : 'Weak_impl.Make.t -> unit
    val unsafe_remove_n : 'Weak_impl.Make.t -> int -> unit
    val remove_n : 'Weak_impl.Make.t -> int -> unit
    val unsafe_remove_range : 'Weak_impl.Make.t -> int -> int -> unit
    val remove_range : 'Weak_impl.Make.t -> int -> int -> unit
    val clear : 'Weak_impl.Make.t -> unit
    val unsafe_swap : 'Weak_impl.Make.t -> int -> int -> unit
    val swap : 'Weak_impl.Make.t -> int -> int -> unit
    val unsafe_swap_in_last : 'Weak_impl.Make.t -> int -> unit
    val swap_in_last : 'Weak_impl.Make.t -> int -> unit
    val unsafe_fill : 'Weak_impl.Make.t -> int -> int -> 'a option -> unit
    val fill : 'Weak_impl.Make.t -> int -> int -> 'a option -> unit
    val unsafe_blit :
      'Weak_impl.Make.t -> int -> 'Weak_impl.Make.t -> int -> int -> unit
    val blit :
      'Weak_impl.Make.t -> int -> 'Weak_impl.Make.t -> int -> int -> unit
    val to_std : 'Weak_impl.Make.t -> 'Weak.t
    val sof_std : Weak_impl.Make.strategy -> 'Weak.t -> 'Weak_impl.Make.t
    val of_std : 'Weak.t -> 'Weak_impl.Make.t
    val to_list_aux :
      'Weak_impl.Make.t -> int -> 'a option list -> 'a option list
    val to_list : 'Weak_impl.Make.t -> 'a option list
    val of_list_aux :
      'Weak_impl.Make.t -> int -> 'a option list -> 'Weak_impl.Make.t
    val of_list : 'a option list -> 'Weak_impl.Make.t
    val iter : ('a option -> 'b) -> 'Weak_impl.Make.t -> unit
    val iteri : (int -> 'a option -> 'b) -> 'Weak_impl.Make.t -> unit
    val fold_left :
      ('-> 'b option -> 'a) -> '-> 'Weak_impl.Make.t -> 'a
    val fold_right :
      ('a option -> '-> 'b) -> 'Weak_impl.Make.t -> '-> 'b
    val for_all_aux :
      int -> ('a option -> bool) -> 'Weak_impl.Make.t -> bool
    val for_all : ('a option -> bool) -> 'Weak_impl.Make.t -> bool
    val exists_aux :
      int -> ('a option -> bool) -> 'Weak_impl.Make.t -> bool
    val exists : ('a option -> bool) -> 'Weak_impl.Make.t -> bool
    val mem_aux : int -> 'a option -> 'Weak_impl.Make.t -> bool
    val mem : 'a option -> 'Weak_impl.Make.t -> bool
    val memq_aux : int -> 'a option -> 'Weak_impl.Make.t -> bool
    val memq : 'a option -> 'Weak_impl.Make.t -> bool
    val pos_aux : int -> 'a option -> 'Weak_impl.Make.t -> int option
    val pos : 'a option -> 'Weak_impl.Make.t -> int option
    val posq_aux : int -> 'a option -> 'Weak_impl.Make.t -> int option
    val posq : 'a option -> 'Weak_impl.Make.t -> int option
    val find_aux :
      int -> ('a option -> bool) -> 'Weak_impl.Make.t -> 'a option
    val find : ('a option -> bool) -> 'Weak_impl.Make.t -> 'a option
    val find_index_aux :
      ('a option -> bool) -> 'Weak_impl.Make.t -> int -> int
    val find_index : ('a option -> bool) -> 'Weak_impl.Make.t -> int -> int
    val filter :
      ('a option -> bool) -> 'Weak_impl.Make.t -> 'Weak_impl.Make.t
    val find_all :
      ('a option -> bool) -> 'Weak_impl.Make.t -> 'Weak_impl.Make.t
    val filter_in_place : ('a option -> bool) -> 'Weak_impl.Make.t -> unit
    val partition :
      ('a option -> bool) ->
      'Weak_impl.Make.t -> 'Weak_impl.Make.t * 'Weak_impl.Make.t
  end