functor (S : Strat.T->
  functor (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