sig
  type ('a, 'b) input
  and ('a, 'b, 'c) output
  and stdin = (char, string) IO.input
  and 'a stdout = (char, string, 'a) IO.output
  exception No_more_input
  exception Input_closed
  exception Output_closed
  exception Not_implemented
  val read : ('a, 'b) IO.input -> 'a
  val nread : ('a, 'b) IO.input -> int -> 'b
  val close_in : ('a, 'b) IO.input -> unit
  val available : ('a, 'b) IO.input -> int
  val pos_in : ('a, 'b) IO.input -> int
  val write : ('a, 'b, 'c) IO.output -> '-> unit
  val nwrite : ('a, 'b, 'c) IO.output -> '-> unit
  val flush : ('a, 'b, 'c) IO.output -> unit
  val close_out : ('a, 'b, 'c) IO.output -> 'c
  val pos_out : ('a, 'b, 'c) IO.output -> int
  val printf :
    ('a, string, 'b) IO.output -> ('c, unit, string, unit) format4 -> 'c
  val input_string : string -> IO.stdin
  val output_string : unit -> string IO.stdout
  val input_channel : Pervasives.in_channel -> IO.stdin
  val output_channel : Pervasives.out_channel -> unit IO.stdout
  val input_enum : 'Enum.t -> ('a, 'Enum.t) IO.input
  val output_enum : unit -> ('a, 'Enum.t, 'Enum.t) IO.output
  val create_in :
    read:(unit -> 'a) ->
    nread:(int -> 'b) ->
    pos:(unit -> int) ->
    available:(unit -> int) -> close:(unit -> unit) -> ('a, 'b) IO.input
  val create_out :
    write:('-> unit) ->
    nwrite:('-> unit) ->
    pos:(unit -> int) ->
    flush:(unit -> unit) -> close:(unit -> 'c) -> ('a, 'b, 'c) IO.output
  val pipe :
    unit -> ('a, 'a list) IO.input * ('a, 'a list, 'a list) IO.output
  exception Overflow of string
  val read_byte : (char, 'a) IO.input -> int
  val read_ui16 : (char, 'a) IO.input -> int
  val read_i16 : (char, 'a) IO.input -> int
  val read_i32 : (char, 'a) IO.input -> int
  val read_string : (char, 'a) IO.input -> string
  val read_line : (char, 'a) IO.input -> string
  val write_byte : (char, 'a, 'b) IO.output -> int -> unit
  val write_ui16 : (char, 'a, 'b) IO.output -> int -> unit
  val write_i16 : (char, 'a, 'b) IO.output -> int -> unit
  val write_i32 : (char, 'a, 'b) IO.output -> int -> unit
  val write_string : 'IO.stdout -> string -> unit
  val write_line : 'IO.stdout -> string -> unit
  val input_bits : (char, 'a) IO.input -> (bool, int) IO.input
  val output_bits :
    (char, 'a, 'b) IO.output -> (bool, int * int, 'b) IO.output
end