sig
  module Array :
    sig
      type elt = char
      type t = Bytes.t
      val empty : t
      val make : int -> elt -> t
      val length : t -> int
      val get : t -> int -> elt
      val set : t -> int -> elt -> unit
      val sub : t -> int -> int -> t
      val copy : t -> t
      val blit : t -> int -> t -> int -> int -> unit
      val iter : (elt -> unit) -> t -> unit
    end
  type t
  exception Empty
  val create : ?bounded:bool -> int -> t
  val copy : t -> t
  val capacity : t -> int
  val max_capacity : t -> int option
  val length : t -> int
  val blit_from : t -> Array.t -> int -> int -> unit
  val blit_into : t -> Array.t -> int -> int -> int
  val append : t -> into:t -> unit
  val to_list : t -> Array.elt list
  val clear : t -> unit
  val reset : t -> unit
  val is_empty : t -> bool
  val junk_front : t -> unit
  val junk_back : t -> unit
  val skip : t -> int -> unit
  val iter : t -> f:(Array.elt -> unit) -> unit
  val iteri : t -> f:(int -> Array.elt -> unit) -> unit
  val get_front : t -> int -> Array.elt
  val get_back : t -> int -> Array.elt
  val push_back : t -> Array.elt -> unit
  val peek_front : t -> Array.elt
  val peek_back : t -> Array.elt
  val take_back : t -> Array.elt option
  val take_back_exn : t -> Array.elt
  val take_front : t -> Array.elt option
  val take_front_exn : t -> Array.elt
  val of_array : Array.t -> t
  val to_array : t -> Array.t
end