functor (S : Strat.T) (Impl : Implementation->
  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 = Nopres_impl.Make.Strategy.t
    type el = Impl.el
    type t = {
      mutable ar : Impl.t;
      mutable vlix : int;
      mutable strategy : Nopres_impl.Make.strategy;
    }
    val name : string
    val invalid_arg : string -> 'a
    val failwith : string -> 'a
    val length : Nopres_impl.Make.t -> int
    val lix : Nopres_impl.Make.t -> int
    val real_length : Nopres_impl.Make.t -> int
    val real_lix : Nopres_impl.Make.t -> int
    val unsafe_get : Nopres_impl.Make.t -> int -> Impl.el
    val unsafe_set : Nopres_impl.Make.t -> int -> Impl.el -> unit
    val get : Nopres_impl.Make.t -> int -> Impl.el
    val set : Nopres_impl.Make.t -> int -> Impl.el -> unit
    val creator : int -> Impl.t
    val empty_ar : Impl.t
    val screate : Nopres_impl.Make.strategy -> int -> Nopres_impl.Make.t
    val smake :
      Nopres_impl.Make.strategy -> int -> Impl.el -> Nopres_impl.Make.t
    val create_fresh : int -> Nopres_impl.Make.t
    val create_from : Nopres_impl.Make.t -> Nopres_impl.Make.t
    val sempty : Nopres_impl.Make.strategy -> Nopres_impl.Make.t
    val empty : unit -> Nopres_impl.Make.t
    val create : int -> Nopres_impl.Make.t
    val make : int -> Impl.el -> Nopres_impl.Make.t
    val sinit :
      Nopres_impl.Make.strategy ->
      int -> (int -> Impl.el) -> Nopres_impl.Make.t
    val init : int -> (int -> Impl.el) -> Nopres_impl.Make.t
    val get_strategy : Nopres_impl.Make.t -> Nopres_impl.Make.strategy
    val resizer : int -> Nopres_impl.Make.t -> int -> unit
    val enforce_strategy : Nopres_impl.Make.t -> unit
    val set_strategy :
      Nopres_impl.Make.t -> Nopres_impl.Make.strategy -> unit
    val put_strategy :
      Nopres_impl.Make.t -> Nopres_impl.Make.strategy -> unit
    val unsafe_blit_on_other :
      Nopres_impl.Make.t -> int -> Nopres_impl.Make.t -> int -> int -> unit
    val copy : Nopres_impl.Make.t -> Nopres_impl.Make.t
    val append :
      Nopres_impl.Make.t -> Nopres_impl.Make.t -> Nopres_impl.Make.t
    val concat_aux :
      Nopres_impl.Make.t ->
      int -> Nopres_impl.Make.t list -> Nopres_impl.Make.t
    val concat : Nopres_impl.Make.t list -> Nopres_impl.Make.t
    val unsafe_sub : Nopres_impl.Make.t -> int -> int -> Nopres_impl.Make.t
    val sub : Nopres_impl.Make.t -> int -> int -> Nopres_impl.Make.t
    val guarantee_ix : Nopres_impl.Make.t -> int -> unit
    val maybe_grow_ix : Nopres_impl.Make.t -> int -> unit
    val add_one : Nopres_impl.Make.t -> Impl.el -> unit
    val unsafe_remove_one : Nopres_impl.Make.t -> unit
    val remove_one : Nopres_impl.Make.t -> unit
    val unsafe_remove_n : Nopres_impl.Make.t -> int -> unit
    val remove_n : Nopres_impl.Make.t -> int -> unit
    val unsafe_remove_range : Nopres_impl.Make.t -> int -> int -> unit
    val remove_range : Nopres_impl.Make.t -> int -> int -> unit
    val clear : Nopres_impl.Make.t -> unit
    val unsafe_swap : Nopres_impl.Make.t -> int -> int -> unit
    val swap : Nopres_impl.Make.t -> int -> int -> unit
    val unsafe_swap_in_last : Nopres_impl.Make.t -> int -> unit
    val swap_in_last : Nopres_impl.Make.t -> int -> unit
    val unsafe_fill : Nopres_impl.Make.t -> int -> int -> Impl.el -> unit
    val fill : Nopres_impl.Make.t -> int -> int -> Impl.el -> unit
    val unsafe_blit :
      Nopres_impl.Make.t -> int -> Nopres_impl.Make.t -> int -> int -> unit
    val blit :
      Nopres_impl.Make.t -> int -> Nopres_impl.Make.t -> int -> int -> unit
    val to_list_aux : Impl.t -> int -> Impl.el list -> Impl.el list
    val to_list : Nopres_impl.Make.t -> Impl.el list
    val of_list_aux : Impl.t -> int -> Impl.el list -> unit
    val of_list : Impl.el list -> Nopres_impl.Make.t
    val sof_list :
      Nopres_impl.Make.strategy -> Impl.el list -> Nopres_impl.Make.t
    val to_array : Nopres_impl.Make.t -> Impl.el array
    val sof_array :
      Nopres_impl.Make.strategy -> Impl.el array -> Nopres_impl.Make.t
    val of_array : Impl.el array -> Nopres_impl.Make.t
    val iter : (Impl.el -> 'a) -> Nopres_impl.Make.t -> unit
    val map :
      (Impl.el -> Impl.el) -> Nopres_impl.Make.t -> Nopres_impl.Make.t
    val iteri : (int -> Impl.el -> 'a) -> Nopres_impl.Make.t -> unit
    val mapi :
      (int -> Impl.el -> Impl.el) -> Nopres_impl.Make.t -> Nopres_impl.Make.t
    val fold_left : ('-> Impl.el -> 'a) -> '-> Nopres_impl.Make.t -> 'a
    val fold_right : (Impl.el -> '-> 'a) -> Nopres_impl.Make.t -> '-> 'a
    val for_all_aux : int -> (Impl.el -> bool) -> Nopres_impl.Make.t -> bool
    val for_all : (Impl.el -> bool) -> Nopres_impl.Make.t -> bool
    val exists_aux : int -> (Impl.el -> bool) -> Nopres_impl.Make.t -> bool
    val exists : (Impl.el -> bool) -> Nopres_impl.Make.t -> bool
    val mem_aux : int -> Impl.el -> Nopres_impl.Make.t -> bool
    val mem : Impl.el -> Nopres_impl.Make.t -> bool
    val memq_aux : int -> Impl.el -> Nopres_impl.Make.t -> bool
    val memq : Impl.el -> Nopres_impl.Make.t -> bool
    val pos_aux : int -> Impl.el -> Nopres_impl.Make.t -> int option
    val pos : Impl.el -> Nopres_impl.Make.t -> int option
    val posq_aux : int -> Impl.el -> Nopres_impl.Make.t -> int option
    val posq : Impl.el -> Nopres_impl.Make.t -> int option
    val find_aux : int -> (Impl.el -> bool) -> Nopres_impl.Make.t -> Impl.el
    val find : (Impl.el -> bool) -> Nopres_impl.Make.t -> Impl.el
    val find_index_aux :
      (Impl.el -> bool) -> Nopres_impl.Make.t -> int -> int
    val find_index : (Impl.el -> bool) -> Nopres_impl.Make.t -> int -> int
    val filter :
      (Impl.el -> bool) -> Nopres_impl.Make.t -> Nopres_impl.Make.t
    val find_all :
      (Impl.el -> bool) -> Nopres_impl.Make.t -> Nopres_impl.Make.t
    val filter_in_place : (Impl.el -> bool) -> Nopres_impl.Make.t -> unit
    val partition :
      (Impl.el -> bool) ->
      Nopres_impl.Make.t -> Nopres_impl.Make.t * Nopres_impl.Make.t
  end