sig
  module DefStrat :
    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
  module BitDefStrat :
    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
  module Array :
    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
      val set : 'a t -> int -> '-> unit
      val sempty : strategy -> 'a t
      val empty : unit -> 'a t
      val screate : strategy -> int -> '-> 'a t
      val create : int -> '-> 'a t
      val smake : strategy -> int -> '-> 'a t
      val make : int -> '-> 'a t
      val sinit : strategy -> int -> (int -> 'a) -> 'a t
      val init : int -> (int -> 'a) -> '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 make_matrix : int -> int -> '-> 'a t t
      val copy : 'a t -> 'a t
      val sub : 'a t -> int -> int -> 'a t
      val fill : 'a t -> int -> int -> '-> 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 -> '-> 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_array : 'a t -> 'a array
      val sof_array : strategy -> 'a array -> 'a t
      val of_array : 'a array -> 'a t
      val to_list : 'a t -> 'a list
      val sof_list : strategy -> 'a list -> 'a t
      val of_list : 'a list -> 'a t
      val iter : ('-> unit) -> 'a t -> unit
      val map : ('-> 'b) -> 'a t -> 'b t
      val iteri : (int -> '-> unit) -> 'a t -> unit
      val mapi : (int -> '-> 'b) -> 'a t -> 'b t
      val fold_left : ('-> '-> 'b) -> '-> 'a t -> 'b
      val fold_right : ('-> '-> 'b) -> 'a t -> '-> 'b
      val for_all : ('-> bool) -> 'a t -> bool
      val exists : ('-> bool) -> 'a t -> bool
      val mem : '-> 'a t -> bool
      val memq : '-> 'a t -> bool
      val pos : '-> 'a t -> int option
      val posq : '-> 'a t -> int option
      val find : ('-> bool) -> 'a t -> 'a
      val find_index : ('-> bool) -> 'a t -> int -> int
      val filter : ('-> bool) -> 'a t -> 'a t
      val find_all : ('-> bool) -> 'a t -> 'a t
      val filter_in_place : ('-> bool) -> 'a t -> unit
      val partition : ('-> bool) -> 'a t -> 'a t * 'a t
      val unsafe_get : 'a t -> int -> 'a
      val unsafe_set : 'a t -> int -> '-> unit
      val unsafe_sub : 'a t -> int -> int -> 'a t
      val unsafe_fill : 'a t -> int -> int -> '-> 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
  module Floats :
    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 t
      type el = float
      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
    end
  module Bits :
    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 t
      type el = bool
      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
    end
  module Weak :
    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
  module Buffer :
    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 t
      type el = char
      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 -> in_channel -> int -> unit
      val output_buffer : out_channel -> t -> unit
      val add_full_channel : t -> in_channel -> unit
      val add_full_channel_f : t -> in_channel -> int -> (int -> int) -> unit
    end
  module MakeArray :
    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 = 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
        val set : 'a t -> int -> '-> unit
        val sempty : strategy -> 'a t
        val empty : unit -> 'a t
        val screate : strategy -> int -> '-> 'a t
        val create : int -> '-> 'a t
        val smake : strategy -> int -> '-> 'a t
        val make : int -> '-> 'a t
        val sinit : strategy -> int -> (int -> 'a) -> 'a t
        val init : int -> (int -> 'a) -> '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 make_matrix : int -> int -> '-> 'a t t
        val copy : 'a t -> 'a t
        val sub : 'a t -> int -> int -> 'a t
        val fill : 'a t -> int -> int -> '-> 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 -> '-> 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_array : 'a t -> 'a array
        val sof_array : strategy -> 'a array -> 'a t
        val of_array : 'a array -> 'a t
        val to_list : 'a t -> 'a list
        val sof_list : strategy -> 'a list -> 'a t
        val of_list : 'a list -> 'a t
        val iter : ('-> unit) -> 'a t -> unit
        val map : ('-> 'b) -> 'a t -> 'b t
        val iteri : (int -> '-> unit) -> 'a t -> unit
        val mapi : (int -> '-> 'b) -> 'a t -> 'b t
        val fold_left : ('-> '-> 'b) -> '-> 'a t -> 'b
        val fold_right : ('-> '-> 'b) -> 'a t -> '-> 'b
        val for_all : ('-> bool) -> 'a t -> bool
        val exists : ('-> bool) -> 'a t -> bool
        val mem : '-> 'a t -> bool
        val memq : '-> 'a t -> bool
        val pos : '-> 'a t -> int option
        val posq : '-> 'a t -> int option
        val find : ('-> bool) -> 'a t -> 'a
        val find_index : ('-> bool) -> 'a t -> int -> int
        val filter : ('-> bool) -> 'a t -> 'a t
        val find_all : ('-> bool) -> 'a t -> 'a t
        val filter_in_place : ('-> bool) -> 'a t -> unit
        val partition : ('-> bool) -> 'a t -> 'a t * 'a t
        val unsafe_get : 'a t -> int -> 'a
        val unsafe_set : 'a t -> int -> '-> unit
        val unsafe_sub : 'a t -> int -> int -> 'a t
        val unsafe_fill : 'a t -> int -> int -> '-> 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
  module MakeFloats :
    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 = Strategy.t
        type t
        type el = float
        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
      end
  module MakeBits :
    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 = Strategy.t
        type t
        type el = bool
        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
      end
  module MakeWeak :
    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 = 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
  module MakeBuffer :
    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 = Strategy.t
        type t
        type el = char
        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 -> in_channel -> int -> unit
        val output_buffer : out_channel -> t -> unit
        val add_full_channel : t -> in_channel -> unit
        val add_full_channel_f :
          t -> in_channel -> int -> (int -> int) -> unit
      end
end