sig
  type input = {
    pos_in : unit -> int64;
    seek_in : int64 -> unit;
    input_char : unit -> char;
    input_byte : unit -> int;
    in_channel_length : unit -> int64;
    set_offset : int64 -> unit;
  }
  type output = {
    pos_out : unit -> int64;
    seek_out : int64 -> unit;
    output_char : char -> unit;
    output_byte : int -> unit;
    out_channel_length : unit -> int64;
  }
  exception EndOfInput
  exception EndOfOutput
  val output_of_stream : Utility.stream -> Io.output
  val output_of_channel : Pervasives.out_channel -> Io.output
  val input_of_channel : Pervasives.in_channel -> Io.input
  val input_of_stream : Utility.stream -> Io.input
  val input_of_bytestream : Utility.bytestream -> Io.input
  val nudge : Io.input -> unit
  val rewind : Io.input -> unit
  val peek_char : Io.input -> char
  val peek_byte : Io.input -> int
  val output_string : Io.output -> string -> unit
  val read_char_back : Io.input -> char
  val read_line : Io.input -> string
  val bytestream_of_input_channel :
    Pervasives.in_channel -> Utility.bytestream
  val bytestream_to_output_channel :
    Pervasives.out_channel -> Utility.bytestream -> unit
  type bitstream
  val bitstream_of_input : Io.input -> Io.bitstream
  val getbit : Io.bitstream -> bool
  val getbitint : Io.bitstream -> int
  val align : Io.bitstream -> unit
  val getval_32 : Io.bitstream -> int -> int32
  type bitstream_write
  val make_write_bitstream : unit -> Io.bitstream_write
  val print_bitstream : Io.bitstream_write -> unit
  val bytestream_of_write_bitstream :
    Io.bitstream_write -> Utility.bytestream
  val putbit : Io.bitstream_write -> int -> unit
  val putbool : Io.bitstream_write -> bool -> unit
  val putval : Io.bitstream_write -> int -> int32 -> unit
  val align_write : Io.bitstream_write -> unit
  val write_bitstream_append :
    Io.bitstream_write -> Io.bitstream_write -> Io.bitstream_write
  val write_bitstream_append_aligned :
    Io.bitstream_write -> Io.bitstream_write -> Io.bitstream_write
  val join_write_bitstreams : Io.bitstream_write list -> Io.bitstream_write
  val input_in_bitstream : Io.bitstream -> Io.input
end