functor (R : RANDOMACCESS)
  (PARAM : sig val max_height : int val leaf_size : int end->
  sig
    type 'a t
    exception Out_of_bounds
    val max_length : int
    val empty : 'BatVect.Make.t
    val singleton : '-> 'BatVect.Make.t
    val of_container : 'R.t -> 'BatVect.Make.t
    val to_container : 'BatVect.Make.t -> 'R.t
    val of_array : 'a array -> 'BatVect.Make.t
    val to_array : 'BatVect.Make.t -> 'a array
    val to_list : 'BatVect.Make.t -> 'a list
    val of_list : 'a list -> 'BatVect.Make.t
    val make : int -> '-> 'BatVect.Make.t
    val init : int -> (int -> 'a) -> 'BatVect.Make.t
    val is_empty : 'BatVect.Make.t -> bool
    val height : 'BatVect.Make.t -> int
    val length : 'BatVect.Make.t -> int
    val balance : 'BatVect.Make.t -> 'BatVect.Make.t
    val concat : 'BatVect.Make.t -> 'BatVect.Make.t -> 'BatVect.Make.t
    val append : '-> 'BatVect.Make.t -> 'BatVect.Make.t
    val prepend : '-> 'BatVect.Make.t -> 'BatVect.Make.t
    val get : 'BatVect.Make.t -> int -> 'a
    val at : 'BatVect.Make.t -> int -> 'a
    val set : 'BatVect.Make.t -> int -> '-> 'BatVect.Make.t
    val modify : 'BatVect.Make.t -> int -> ('-> 'a) -> 'BatVect.Make.t
    val destructive_set : 'BatVect.Make.t -> int -> '-> unit
    val sub : 'BatVect.Make.t -> int -> int -> 'BatVect.Make.t
    val insert :
      int -> 'BatVect.Make.t -> 'BatVect.Make.t -> 'BatVect.Make.t
    val remove : int -> int -> 'BatVect.Make.t -> 'BatVect.Make.t
    val enum : 'BatVect.Make.t -> 'BatEnum.t
    val of_enum : 'BatEnum.t -> 'BatVect.Make.t
    val backwards : 'BatVect.Make.t -> 'BatEnum.t
    val of_backwards : 'BatEnum.t -> 'BatVect.Make.t
    val iter : ('-> unit) -> 'BatVect.Make.t -> unit
    val iteri : (int -> '-> unit) -> 'BatVect.Make.t -> unit
    val rangeiter : ('-> unit) -> int -> int -> 'BatVect.Make.t -> unit
    val fold_left : ('-> '-> 'b) -> '-> 'BatVect.Make.t -> 'b
    val fold : ('-> '-> 'b) -> '-> 'BatVect.Make.t -> 'b
    val reduce : ('-> '-> 'a) -> 'BatVect.Make.t -> 'a
    val fold_right : ('-> '-> 'b) -> 'BatVect.Make.t -> '-> 'b
    val foldi : (int -> '-> '-> 'b) -> '-> 'BatVect.Make.t -> 'b
    val map : ('-> 'b) -> 'BatVect.Make.t -> 'BatVect.Make.t
    val mapi : (int -> '-> 'b) -> 'BatVect.Make.t -> 'BatVect.Make.t
    val for_all : ('-> bool) -> 'BatVect.Make.t -> bool
    val exists : ('-> bool) -> 'BatVect.Make.t -> bool
    val find : ('-> bool) -> 'BatVect.Make.t -> 'a
    val find_opt : ('-> bool) -> 'BatVect.Make.t -> 'a option
    val mem : '-> 'BatVect.Make.t -> bool
    val memq : '-> 'BatVect.Make.t -> bool
    val findi : ('-> bool) -> 'BatVect.Make.t -> int
    val filter : ('-> bool) -> 'BatVect.Make.t -> 'BatVect.Make.t
    val filter_map :
      ('-> 'b option) -> 'BatVect.Make.t -> 'BatVect.Make.t
    val find_all : ('-> bool) -> 'BatVect.Make.t -> 'BatVect.Make.t
    val partition :
      ('-> bool) ->
      'BatVect.Make.t -> 'BatVect.Make.t * 'BatVect.Make.t
    val first : 'BatVect.Make.t -> 'a
    val last : 'BatVect.Make.t -> 'a
    val shift : 'BatVect.Make.t -> 'a * 'BatVect.Make.t
    val pop : 'BatVect.Make.t -> 'a * 'BatVect.Make.t
    module Labels :
      sig
        val init : int -> f:(int -> 'a) -> 'BatVect.Make.t
        val get : 'BatVect.Make.t -> n:int -> 'a
        val at : 'BatVect.Make.t -> n:int -> 'a
        val set : 'BatVect.Make.t -> n:int -> elem:'-> 'BatVect.Make.t
        val modify :
          'BatVect.Make.t -> n:int -> f:('-> 'a) -> 'BatVect.Make.t
        val destructive_set : 'BatVect.Make.t -> n:int -> elem:'-> unit
        val sub : 'BatVect.Make.t -> m:int -> n:int -> 'BatVect.Make.t
        val insert :
          n:int ->
          sub:'BatVect.Make.t -> 'BatVect.Make.t -> 'BatVect.Make.t
        val remove : m:int -> n:int -> 'BatVect.Make.t -> 'BatVect.Make.t
        val iter : f:('-> unit) -> 'BatVect.Make.t -> unit
        val iteri : f:(int -> '-> unit) -> 'BatVect.Make.t -> unit
        val rangeiter :
          f:('-> unit) -> m:int -> n:int -> 'BatVect.Make.t -> unit
        val fold_left :
          f:('-> '-> 'b) -> init:'-> 'BatVect.Make.t -> 'b
        val fold : f:('-> '-> 'b) -> init:'-> 'BatVect.Make.t -> 'b
        val reduce : f:('-> '-> 'a) -> 'BatVect.Make.t -> 'a
        val fold_right :
          f:('-> '-> 'b) -> 'BatVect.Make.t -> init:'-> 'b
        val foldi :
          f:(int -> '-> '-> 'b) -> init:'-> 'BatVect.Make.t -> 'b
        val map : f:('-> 'b) -> 'BatVect.Make.t -> 'BatVect.Make.t
        val mapi :
          f:(int -> '-> 'b) -> 'BatVect.Make.t -> 'BatVect.Make.t
        val for_all : f:('-> bool) -> 'BatVect.Make.t -> bool
        val exists : f:('-> bool) -> 'BatVect.Make.t -> bool
        val find : f:('-> bool) -> 'BatVect.Make.t -> 'a
        val mem : elem:'-> 'BatVect.Make.t -> bool
        val memq : elem:'-> 'BatVect.Make.t -> bool
        val findi : f:('-> bool) -> 'BatVect.Make.t -> int
        val filter : f:('-> bool) -> 'BatVect.Make.t -> 'BatVect.Make.t
        val filter_map :
          f:('-> 'b option) -> 'BatVect.Make.t -> 'BatVect.Make.t
        val find_all :
          f:('-> bool) -> 'BatVect.Make.t -> 'BatVect.Make.t
        val partition :
          f:('-> bool) ->
          'BatVect.Make.t -> 'BatVect.Make.t * 'BatVect.Make.t
      end
    val print :
      ?first:string ->
      ?last:string ->
      ?sep:string ->
      ('BatInnerIO.output -> '-> unit) ->
      'BatInnerIO.output -> 'BatVect.Make.t -> unit
    val invariants : 'BatVect.Make.t -> unit
  end