functor (E : Elt->
  sig
    type elt = E.t
    type buffer = elt array
    type t
    val create : int -> t
    val read_space : t -> int
    val write_space : t -> int
    val read_advance : t -> int -> unit
    val write_advance : t -> int -> unit
    val read : t -> buffer -> int -> int -> unit
    val peek : t -> buffer -> int -> int -> unit
    val write : t -> buffer -> int -> int -> unit
    val transmit : t -> (buffer -> int -> int -> int) -> int
  end