sig
  module type T =
    sig
      module Strategy : Strat.T
      type strategy = Strategy.t
      type 'a t
      val length : 'Weak_intf.T.t -> int
      val lix : 'Weak_intf.T.t -> int
      val real_length : 'Weak_intf.T.t -> int
      val real_lix : 'Weak_intf.T.t -> int
      val get : 'Weak_intf.T.t -> int -> 'a option
      val get_copy : 'Weak_intf.T.t -> int -> 'a option
      val check : 'Weak_intf.T.t -> int -> bool
      val set : 'Weak_intf.T.t -> int -> 'a option -> unit
      val sempty : Weak_intf.T.strategy -> 'Weak_intf.T.t
      val empty : unit -> 'Weak_intf.T.t
      val screate : Weak_intf.T.strategy -> int -> 'Weak_intf.T.t
      val create : int -> 'Weak_intf.T.t
      val sinit :
        Weak_intf.T.strategy -> int -> (int -> 'a option) -> 'Weak_intf.T.t
      val init : int -> (int -> 'a option) -> 'Weak_intf.T.t
      val get_strategy : 'Weak_intf.T.t -> Weak_intf.T.strategy
      val set_strategy : 'Weak_intf.T.t -> Weak_intf.T.strategy -> unit
      val put_strategy : 'Weak_intf.T.t -> Weak_intf.T.strategy -> unit
      val enforce_strategy : 'Weak_intf.T.t -> unit
      val copy : 'Weak_intf.T.t -> 'Weak_intf.T.t
      val sub : 'Weak_intf.T.t -> int -> int -> 'Weak_intf.T.t
      val fill : 'Weak_intf.T.t -> int -> int -> 'a option -> unit
      val blit :
        'Weak_intf.T.t -> int -> 'Weak_intf.T.t -> int -> int -> unit
      val append : 'Weak_intf.T.t -> 'Weak_intf.T.t -> 'Weak_intf.T.t
      val concat : 'Weak_intf.T.t list -> 'Weak_intf.T.t
      val add_one : 'Weak_intf.T.t -> 'a option -> unit
      val remove_one : 'Weak_intf.T.t -> unit
      val remove_n : 'Weak_intf.T.t -> int -> unit
      val remove_range : 'Weak_intf.T.t -> int -> int -> unit
      val clear : 'Weak_intf.T.t -> unit
      val swap : 'Weak_intf.T.t -> int -> int -> unit
      val swap_in_last : 'Weak_intf.T.t -> int -> unit
      val to_std : 'Weak_intf.T.t -> 'Weak.t
      val sof_std : Weak_intf.T.strategy -> 'Weak.t -> 'Weak_intf.T.t
      val of_std : 'Weak.t -> 'Weak_intf.T.t
      val to_list : 'Weak_intf.T.t -> 'a option list
      val of_list : 'a option list -> 'Weak_intf.T.t
      val iter : ('a option -> unit) -> 'Weak_intf.T.t -> unit
      val iteri : (int -> 'a option -> unit) -> 'Weak_intf.T.t -> unit
      val fold_left : ('-> 'a option -> 'b) -> '-> 'Weak_intf.T.t -> 'b
      val fold_right :
        ('a option -> '-> 'b) -> 'Weak_intf.T.t -> '-> 'b
      val for_all : ('a option -> bool) -> 'Weak_intf.T.t -> bool
      val exists : ('a option -> bool) -> 'Weak_intf.T.t -> bool
      val mem : 'a option -> 'Weak_intf.T.t -> bool
      val memq : 'a option -> 'Weak_intf.T.t -> bool
      val pos : 'a option -> 'Weak_intf.T.t -> int option
      val posq : 'a option -> 'Weak_intf.T.t -> int option
      val find : ('a option -> bool) -> 'Weak_intf.T.t -> 'a option
      val find_index : ('a option -> bool) -> 'Weak_intf.T.t -> int -> int
      val filter :
        ('a option -> bool) -> 'Weak_intf.T.t -> 'Weak_intf.T.t
      val find_all :
        ('a option -> bool) -> 'Weak_intf.T.t -> 'Weak_intf.T.t
      val filter_in_place : ('a option -> bool) -> 'Weak_intf.T.t -> unit
      val partition :
        ('a option -> bool) ->
        'Weak_intf.T.t -> 'Weak_intf.T.t * 'Weak_intf.T.t
      val unsafe_get : 'Weak_intf.T.t -> int -> 'a option
      val unsafe_set : 'Weak_intf.T.t -> int -> 'a option -> unit
      val unsafe_sub : 'Weak_intf.T.t -> int -> int -> 'Weak_intf.T.t
      val unsafe_fill : 'Weak_intf.T.t -> int -> int -> 'a option -> unit
      val unsafe_blit :
        'Weak_intf.T.t -> int -> 'Weak_intf.T.t -> int -> int -> unit
      val unsafe_remove_one : 'Weak_intf.T.t -> unit
      val unsafe_remove_n : 'Weak_intf.T.t -> int -> unit
      val unsafe_swap : 'Weak_intf.T.t -> int -> int -> unit
      val unsafe_swap_in_last : 'Weak_intf.T.t -> int -> unit
    end
end