sig
  module type T =
    sig
      module Strategy : Strat.T
      type strategy = Strategy.t
      type t
      type el
      val length : Nopres_intf.T.t -> int
      val lix : Nopres_intf.T.t -> int
      val real_length : Nopres_intf.T.t -> int
      val real_lix : Nopres_intf.T.t -> int
      val get : Nopres_intf.T.t -> int -> Nopres_intf.T.el
      val set : Nopres_intf.T.t -> int -> Nopres_intf.T.el -> unit
      val sempty : Nopres_intf.T.strategy -> Nopres_intf.T.t
      val empty : unit -> Nopres_intf.T.t
      val screate : Nopres_intf.T.strategy -> int -> Nopres_intf.T.t
      val create : int -> Nopres_intf.T.t
      val smake :
        Nopres_intf.T.strategy -> int -> Nopres_intf.T.el -> Nopres_intf.T.t
      val make : int -> Nopres_intf.T.el -> Nopres_intf.T.t
      val sinit :
        Nopres_intf.T.strategy ->
        int -> (int -> Nopres_intf.T.el) -> Nopres_intf.T.t
      val init : int -> (int -> Nopres_intf.T.el) -> Nopres_intf.T.t
      val get_strategy : Nopres_intf.T.t -> Nopres_intf.T.strategy
      val set_strategy : Nopres_intf.T.t -> Nopres_intf.T.strategy -> unit
      val put_strategy : Nopres_intf.T.t -> Nopres_intf.T.strategy -> unit
      val enforce_strategy : Nopres_intf.T.t -> unit
      val copy : Nopres_intf.T.t -> Nopres_intf.T.t
      val sub : Nopres_intf.T.t -> int -> int -> Nopres_intf.T.t
      val fill : Nopres_intf.T.t -> int -> int -> Nopres_intf.T.el -> unit
      val blit :
        Nopres_intf.T.t -> int -> Nopres_intf.T.t -> int -> int -> unit
      val append : Nopres_intf.T.t -> Nopres_intf.T.t -> Nopres_intf.T.t
      val concat : Nopres_intf.T.t list -> Nopres_intf.T.t
      val add_one : Nopres_intf.T.t -> Nopres_intf.T.el -> unit
      val remove_one : Nopres_intf.T.t -> unit
      val remove_n : Nopres_intf.T.t -> int -> unit
      val remove_range : Nopres_intf.T.t -> int -> int -> unit
      val clear : Nopres_intf.T.t -> unit
      val swap : Nopres_intf.T.t -> int -> int -> unit
      val swap_in_last : Nopres_intf.T.t -> int -> unit
      val to_array : Nopres_intf.T.t -> Nopres_intf.T.el array
      val sof_array :
        Nopres_intf.T.strategy -> Nopres_intf.T.el array -> Nopres_intf.T.t
      val of_array : Nopres_intf.T.el array -> Nopres_intf.T.t
      val to_list : Nopres_intf.T.t -> Nopres_intf.T.el list
      val sof_list :
        Nopres_intf.T.strategy -> Nopres_intf.T.el list -> Nopres_intf.T.t
      val of_list : Nopres_intf.T.el list -> Nopres_intf.T.t
      val iter : (Nopres_intf.T.el -> unit) -> Nopres_intf.T.t -> unit
      val map :
        (Nopres_intf.T.el -> Nopres_intf.T.el) ->
        Nopres_intf.T.t -> Nopres_intf.T.t
      val iteri :
        (int -> Nopres_intf.T.el -> unit) -> Nopres_intf.T.t -> unit
      val mapi :
        (int -> Nopres_intf.T.el -> Nopres_intf.T.el) ->
        Nopres_intf.T.t -> Nopres_intf.T.t
      val fold_left :
        ('-> Nopres_intf.T.el -> 'a) -> '-> Nopres_intf.T.t -> 'a
      val fold_right :
        (Nopres_intf.T.el -> '-> 'a) -> Nopres_intf.T.t -> '-> 'a
      val for_all : (Nopres_intf.T.el -> bool) -> Nopres_intf.T.t -> bool
      val exists : (Nopres_intf.T.el -> bool) -> Nopres_intf.T.t -> bool
      val mem : Nopres_intf.T.el -> Nopres_intf.T.t -> bool
      val memq : Nopres_intf.T.el -> Nopres_intf.T.t -> bool
      val pos : Nopres_intf.T.el -> Nopres_intf.T.t -> int option
      val posq : Nopres_intf.T.el -> Nopres_intf.T.t -> int option
      val find :
        (Nopres_intf.T.el -> bool) -> Nopres_intf.T.t -> Nopres_intf.T.el
      val find_index :
        (Nopres_intf.T.el -> bool) -> Nopres_intf.T.t -> int -> int
      val filter :
        (Nopres_intf.T.el -> bool) -> Nopres_intf.T.t -> Nopres_intf.T.t
      val find_all :
        (Nopres_intf.T.el -> bool) -> Nopres_intf.T.t -> Nopres_intf.T.t
      val filter_in_place :
        (Nopres_intf.T.el -> bool) -> Nopres_intf.T.t -> unit
      val partition :
        (Nopres_intf.T.el -> bool) ->
        Nopres_intf.T.t -> Nopres_intf.T.t * Nopres_intf.T.t
      val unsafe_get : Nopres_intf.T.t -> int -> Nopres_intf.T.el
      val unsafe_set : Nopres_intf.T.t -> int -> Nopres_intf.T.el -> unit
      val unsafe_sub : Nopres_intf.T.t -> int -> int -> Nopres_intf.T.t
      val unsafe_fill :
        Nopres_intf.T.t -> int -> int -> Nopres_intf.T.el -> unit
      val unsafe_blit :
        Nopres_intf.T.t -> int -> Nopres_intf.T.t -> int -> int -> unit
      val unsafe_remove_one : Nopres_intf.T.t -> unit
      val unsafe_remove_n : Nopres_intf.T.t -> int -> unit
      val unsafe_swap : Nopres_intf.T.t -> int -> int -> unit
      val unsafe_swap_in_last : Nopres_intf.T.t -> int -> unit
    end
  module type Buffer =
    sig
      module Strategy : Strat.T
      type strategy = Strategy.t
      type t
      type el
      val length : t -> int
      val lix : t -> int
      val real_length : t -> int
      val real_lix : t -> int
      val get : t -> int -> el
      val set : t -> int -> el -> unit
      val sempty : strategy -> t
      val empty : unit -> t
      val screate : strategy -> int -> t
      val create : int -> t
      val smake : strategy -> int -> el -> t
      val make : int -> el -> t
      val sinit : strategy -> int -> (int -> el) -> t
      val init : int -> (int -> el) -> t
      val get_strategy : t -> strategy
      val set_strategy : t -> strategy -> unit
      val put_strategy : t -> strategy -> unit
      val enforce_strategy : t -> unit
      val copy : t -> t
      val sub : t -> int -> int -> t
      val fill : t -> int -> int -> el -> unit
      val blit : t -> int -> t -> int -> int -> unit
      val append : t -> t -> t
      val concat : t list -> t
      val add_one : t -> el -> unit
      val remove_one : t -> unit
      val remove_n : t -> int -> unit
      val remove_range : t -> int -> int -> unit
      val clear : t -> unit
      val swap : t -> int -> int -> unit
      val swap_in_last : t -> int -> unit
      val to_array : t -> el array
      val sof_array : strategy -> el array -> t
      val of_array : el array -> t
      val to_list : t -> el list
      val sof_list : strategy -> el list -> t
      val of_list : el list -> t
      val iter : (el -> unit) -> t -> unit
      val map : (el -> el) -> t -> t
      val iteri : (int -> el -> unit) -> t -> unit
      val mapi : (int -> el -> el) -> t -> t
      val fold_left : ('-> el -> 'a) -> '-> t -> 'a
      val fold_right : (el -> '-> 'a) -> t -> '-> 'a
      val for_all : (el -> bool) -> t -> bool
      val exists : (el -> bool) -> t -> bool
      val mem : el -> t -> bool
      val memq : el -> t -> bool
      val pos : el -> t -> int option
      val posq : el -> t -> int option
      val find : (el -> bool) -> t -> el
      val find_index : (el -> bool) -> t -> int -> int
      val filter : (el -> bool) -> t -> t
      val find_all : (el -> bool) -> t -> t
      val filter_in_place : (el -> bool) -> t -> unit
      val partition : (el -> bool) -> t -> t * t
      val unsafe_get : t -> int -> el
      val unsafe_set : t -> int -> el -> unit
      val unsafe_sub : t -> int -> int -> t
      val unsafe_fill : t -> int -> int -> el -> unit
      val unsafe_blit : t -> int -> t -> int -> int -> unit
      val unsafe_remove_one : t -> unit
      val unsafe_remove_n : t -> int -> unit
      val unsafe_swap : t -> int -> int -> unit
      val unsafe_swap_in_last : t -> int -> unit
      val sof_string : strategy -> string -> t
      val of_string : string -> t
      val contents : t -> string
      val reset : t -> unit
      val add_char : t -> char -> unit
      val add_string : t -> string -> unit
      val add_substring : t -> string -> int -> int -> unit
      val add_buffer : t -> t -> unit
      val add_channel : t -> Pervasives.in_channel -> int -> unit
      val output_buffer : Pervasives.out_channel -> t -> unit
      val add_full_channel : t -> Pervasives.in_channel -> unit
      val add_full_channel_f :
        t -> Pervasives.in_channel -> int -> (int -> int) -> unit
    end
end