sig
  module type S =
    sig
      type elt
      type t
      val empty : CCRingBuffer.Array.S.t
      val make : int -> CCRingBuffer.Array.S.elt -> CCRingBuffer.Array.S.t
      val length : CCRingBuffer.Array.S.t -> int
      val get : CCRingBuffer.Array.S.t -> int -> CCRingBuffer.Array.S.elt
      val set :
        CCRingBuffer.Array.S.t -> int -> CCRingBuffer.Array.S.elt -> unit
      val sub :
        CCRingBuffer.Array.S.t -> int -> int -> CCRingBuffer.Array.S.t
      val copy : CCRingBuffer.Array.S.t -> CCRingBuffer.Array.S.t
      val blit :
        CCRingBuffer.Array.S.t ->
        int -> CCRingBuffer.Array.S.t -> int -> int -> unit
      val iter :
        (CCRingBuffer.Array.S.elt -> unit) -> CCRingBuffer.Array.S.t -> unit
    end
  module Byte :
    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
  module Make :
    functor (Elt : sig type t end->
      sig
        type elt = Elt.t
        type t = Elt.t array
        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
end