sig
  type ro = [ `RO ]
  type rw = [ `RW ]
  type ('a, 'mut) t
  type 'a vector = ('a, CCVector.rw) CCVector.t
  type 'a ro_vector = ('a, CCVector.ro) CCVector.t
  type 'a sequence = ('a -> unit) -> unit
  type 'a klist = unit -> [ `Cons of 'a * 'a CCVector.klist | `Nil ]
  type 'a gen = unit -> 'a option
  type 'a equal = 'a -> 'a -> bool
  type 'a ord = 'a -> 'a -> int
  type 'a printer = Format.formatter -> 'a -> unit
  val freeze : ('a, 'b) CCVector.t -> ('a, CCVector.ro) CCVector.t
  val freeze_copy : ('a, 'b) CCVector.t -> ('a, CCVector.ro) CCVector.t
  val create : unit -> ('a, CCVector.rw) CCVector.t
  val create_with : ?capacity:int -> 'a -> ('a, CCVector.rw) CCVector.t
  val return : 'a -> ('a, 'mut) CCVector.t
  val make : int -> 'a -> ('a, 'mut) CCVector.t
  val init : int -> (int -> 'a) -> ('a, 'mut) CCVector.t
  val clear : ('a, CCVector.rw) CCVector.t -> unit
  val ensure_with : init:'a -> ('a, CCVector.rw) CCVector.t -> int -> unit
  val ensure : ('a, CCVector.rw) CCVector.t -> int -> unit
  val is_empty : ('a, 'b) CCVector.t -> bool
  val push : ('a, CCVector.rw) CCVector.t -> 'a -> unit
  val append : ('a, CCVector.rw) CCVector.t -> ('a, 'b) CCVector.t -> unit
  val append_array : ('a, CCVector.rw) CCVector.t -> 'a array -> unit
  val append_seq :
    ('a, CCVector.rw) CCVector.t -> 'a CCVector.sequence -> unit
  val append_list : ('a, CCVector.rw) CCVector.t -> 'a list -> unit
  val append_gen : ('a, CCVector.rw) CCVector.t -> 'a CCVector.gen -> unit
  val equal : 'a CCVector.equal -> ('a, 'b) CCVector.t CCVector.equal
  val compare : 'a CCVector.ord -> ('a, 'b) CCVector.t CCVector.ord
  exception Empty
  val pop : ('a, CCVector.rw) CCVector.t -> 'a option
  val pop_exn : ('a, CCVector.rw) CCVector.t -> 'a
  val top : ('a, 'b) CCVector.t -> 'a option
  val top_exn : ('a, 'b) CCVector.t -> 'a
  val copy : ('a, 'b) CCVector.t -> ('a, 'mut) CCVector.t
  val shrink : ('a, CCVector.rw) CCVector.t -> int -> unit
  val member : ?eq:('a -> 'a -> bool) -> 'a -> ('a, 'b) CCVector.t -> bool
  val sort :
    ('a -> 'a -> int) -> ('a, 'b) CCVector.t -> ('a, 'mut) CCVector.t
  val sort' : ('a -> 'a -> int) -> ('a, CCVector.rw) CCVector.t -> unit
  val uniq_sort : ('a -> 'a -> int) -> ('a, CCVector.rw) CCVector.t -> unit
  val iter : ('a -> unit) -> ('a, 'b) CCVector.t -> unit
  val iteri : (int -> 'a -> unit) -> ('a, 'b) CCVector.t -> unit
  val map : ('a -> 'b) -> ('a, 'c) CCVector.t -> ('b, 'mut) CCVector.t
  val filter : ('a -> bool) -> ('a, 'b) CCVector.t -> ('a, 'mut) CCVector.t
  val filter' : ('a -> bool) -> ('a, CCVector.rw) CCVector.t -> unit
  val fold : ('b -> 'a -> 'b) -> 'b -> ('a, 'c) CCVector.t -> 'b
  val exists : ('a -> bool) -> ('a, 'b) CCVector.t -> bool
  val for_all : ('a -> bool) -> ('a, 'b) CCVector.t -> bool
  val find : ('a -> bool) -> ('a, 'b) CCVector.t -> 'a option
  val find_exn : ('a -> bool) -> ('a, 'b) CCVector.t -> 'a
  val find_map : ('a -> 'b option) -> ('a, 'c) CCVector.t -> 'b option
  val filter_map :
    ('a -> 'b option) -> ('a, 'c) CCVector.t -> ('b, 'mut) CCVector.t
  val flat_map :
    ('a -> ('b, 'c) CCVector.t) ->
    ('a, 'd) CCVector.t -> ('b, 'mut) CCVector.t
  val flat_map_seq :
    ('a -> 'b CCVector.sequence) ->
    ('a, 'c) CCVector.t -> ('b, 'mut) CCVector.t
  val flat_map_list :
    ('a -> 'b list) -> ('a, 'c) CCVector.t -> ('b, 'mut) CCVector.t
  val ( >>= ) :
    ('a, 'c) CCVector.t ->
    ('a -> ('b, 'd) CCVector.t) -> ('b, 'mut) CCVector.t
  val ( >|= ) : ('a, 'c) CCVector.t -> ('a -> 'b) -> ('b, 'mut) CCVector.t
  val get : ('a, 'b) CCVector.t -> int -> 'a
  val set : ('a, CCVector.rw) CCVector.t -> int -> 'a -> unit
  val remove : ('a, CCVector.rw) CCVector.t -> int -> unit
  val rev : ('a, 'b) CCVector.t -> ('a, 'mut) CCVector.t
  val rev_in_place : ('a, CCVector.rw) CCVector.t -> unit
  val rev_iter : ('a -> unit) -> ('a, 'b) CCVector.t -> unit
  val size : ('a, 'b) CCVector.t -> int
  val length : ('a, 'b) CCVector.t -> int
  val capacity : ('a, 'b) CCVector.t -> int
  val unsafe_get_array : ('a, CCVector.rw) CCVector.t -> 'a array
  val ( -- ) : int -> int -> (int, 'mut) CCVector.t
  val ( --^ ) : int -> int -> (int, 'mut) CCVector.t
  val of_array : 'a array -> ('a, 'mut) CCVector.t
  val of_list : 'a list -> ('a, 'mut) CCVector.t
  val to_array : ('a, 'b) CCVector.t -> 'a array
  val to_list : ('a, 'b) CCVector.t -> 'a list
  val of_seq :
    ?init:('a, CCVector.rw) CCVector.t ->
    'a CCVector.sequence -> ('a, CCVector.rw) CCVector.t
  val to_seq : ('a, 'b) CCVector.t -> 'a CCVector.sequence
  val to_seq_rev : ('a, 'b) CCVector.t -> 'a CCVector.sequence
  val slice : ('a, CCVector.rw) CCVector.t -> 'a array * int * int
  val slice_seq : ('a, 'b) CCVector.t -> int -> int -> 'a CCVector.sequence
  val of_klist :
    ?init:('a, CCVector.rw) CCVector.t ->
    'a CCVector.klist -> ('a, CCVector.rw) CCVector.t
  val to_klist : ('a, 'b) CCVector.t -> 'a CCVector.klist
  val of_gen :
    ?init:('a, CCVector.rw) CCVector.t ->
    'a CCVector.gen -> ('a, CCVector.rw) CCVector.t
  val to_gen : ('a, 'b) CCVector.t -> 'a CCVector.gen
  val pp :
    ?start:string ->
    ?stop:string ->
    ?sep:string ->
    'a CCVector.printer -> ('a, 'b) CCVector.t CCVector.printer
end