sig
  type input
  type 'a output
  exception No_more_input
  exception Input_closed
  exception Output_closed
  val read : IO.input -> char
  val nread : IO.input -> int -> string
  val really_nread : IO.input -> int -> string
  val input : IO.input -> string -> int -> int -> int
  val really_input : IO.input -> string -> int -> int -> int
  val close_in : IO.input -> unit
  val write : 'IO.output -> char -> unit
  val nwrite : 'IO.output -> string -> unit
  val output : 'IO.output -> string -> int -> int -> int
  val really_output : 'IO.output -> string -> int -> int -> int
  val flush : 'IO.output -> unit
  val close_out : 'IO.output -> 'a
  val input_string : string -> IO.input
  val output_string : unit -> string IO.output
  val input_channel : Pervasives.in_channel -> IO.input
  val output_channel : Pervasives.out_channel -> unit IO.output
  val input_enum : char Enum.t -> IO.input
  val output_enum : unit -> char Enum.t IO.output
  val create_in :
    read:(unit -> char) ->
    input:(string -> int -> int -> int) -> close:(unit -> unit) -> IO.input
  val create_out :
    write:(char -> unit) ->
    output:(string -> int -> int -> int) ->
    flush:(unit -> unit) -> close:(unit -> 'a) -> 'IO.output
  val printf : 'IO.output -> ('b, unit, string, unit) format4 -> 'b
  val read_all : IO.input -> string
  val pipe : unit -> IO.input * unit IO.output
  val pos_in : IO.input -> IO.input * (unit -> int)
  val pos_out : 'IO.output -> 'IO.output * (unit -> int)
  external cast_output : 'IO.output -> unit IO.output = "%identity"
  exception Overflow of string
  val read_byte : IO.input -> int
  val read_signed_byte : IO.input -> int
  val read_ui16 : IO.input -> int
  val read_i16 : IO.input -> int
  val read_i32 : IO.input -> int
  val read_real_i32 : IO.input -> int32
  val read_i64 : IO.input -> int64
  val read_double : IO.input -> float
  val read_string : IO.input -> string
  val read_line : IO.input -> string
  val write_byte : 'IO.output -> int -> unit
  val write_ui16 : 'IO.output -> int -> unit
  val write_i16 : 'IO.output -> int -> unit
  val write_i32 : 'IO.output -> int -> unit
  val write_real_i32 : 'IO.output -> int32 -> unit
  val write_i64 : 'IO.output -> int64 -> unit
  val write_double : 'IO.output -> float -> unit
  val write_string : 'IO.output -> string -> unit
  val write_line : 'IO.output -> string -> unit
  module BigEndian :
    sig
      val read_ui16 : IO.input -> int
      val read_i16 : IO.input -> int
      val read_i32 : IO.input -> int
      val read_real_i32 : IO.input -> int32
      val read_i64 : IO.input -> int64
      val read_double : IO.input -> float
      val write_ui16 : 'IO.output -> int -> unit
      val write_i16 : 'IO.output -> int -> unit
      val write_i32 : 'IO.output -> int -> unit
      val write_real_i32 : 'IO.output -> int32 -> unit
      val write_i64 : 'IO.output -> int64 -> unit
      val write_double : 'IO.output -> float -> unit
    end
  type in_bits
  type out_bits
  exception Bits_error
  val input_bits : IO.input -> IO.in_bits
  val output_bits : 'IO.output -> IO.out_bits
  val read_bits : IO.in_bits -> int -> int
  val write_bits : IO.out_bits -> nbits:int -> int -> unit
  val flush_bits : IO.out_bits -> unit
  val drop_bits : IO.in_bits -> unit
  class in_channel :
    IO.input ->
    object
      method close_in : unit -> unit
      method input : string -> int -> int -> int
    end
  class out_channel :
    'IO.output ->
    object
      method close_out : unit -> unit
      method flush : unit -> unit
      method output : string -> int -> int -> int
    end
  class in_chars :
    IO.input ->
    object method close_in : unit -> unit method get : unit -> char end
  class out_chars :
    'IO.output ->
    object
      method close_out : unit -> unit
      method flush : unit -> unit
      method put : char -> unit
    end
  val from_in_channel : #IO.in_channel -> IO.input
  val from_out_channel : #IO.out_channel -> unit IO.output
  val from_in_chars : #IO.in_chars -> IO.input
  val from_out_chars : #IO.out_chars -> unit IO.output
end