sig
  type input = BatInnerIO.input
  type 'a output = 'BatInnerIO.output
  type ('a, 'b) printer = 'BatIO.output -> '-> unit
  type 'a f_printer = Stdlib.Format.formatter -> '-> unit
  exception No_more_input
  exception Input_closed
  exception Output_closed
  val stdin : BatIO.input
  val stdout : unit BatIO.output
  val stderr : unit BatIO.output
  val stdnull : unit BatIO.output
  val read : BatIO.input -> char
  val nread : BatIO.input -> int -> string
  val really_nread : BatIO.input -> int -> string
  val input : BatIO.input -> Stdlib.Bytes.t -> int -> int -> int
  val really_input : BatIO.input -> Stdlib.Bytes.t -> int -> int -> int
  val close_in : BatIO.input -> unit
  val write : (char, 'a) BatIO.printer
  val nwrite : (string, 'a) BatIO.printer
  val output : 'BatIO.output -> Stdlib.Bytes.t -> int -> int -> int
  val output_substring : 'BatIO.output -> string -> int -> int -> int
  val really_output : 'BatIO.output -> Stdlib.Bytes.t -> int -> int -> int
  val really_output_substring :
    'BatIO.output -> string -> int -> int -> int
  val flush : 'BatIO.output -> unit
  val flush_all : unit -> unit
  val close_out : 'BatIO.output -> 'a
  val close_all : unit -> unit
  val input_string : string -> BatIO.input
  val output_string : unit -> string BatIO.output
  val input_enum : char BatEnum.t -> BatIO.input
  val output_enum : unit -> char BatEnum.t BatIO.output
  val combine : 'BatIO.output * 'BatIO.output -> ('a * 'b) BatIO.output
  val tab_out : ?tab:char -> int -> 'BatIO.output -> unit BatIO.output
  val read_all : BatIO.input -> string
  val pipe : unit -> BatIO.input * unit BatIO.output
  val copy : ?buffer:int -> BatIO.input -> 'BatIO.output -> unit
  val pos_in : BatIO.input -> BatIO.input * (unit -> int)
  val progress_in : BatIO.input -> (unit -> unit) -> BatIO.input
  val pos_out : 'BatIO.output -> unit BatIO.output * (unit -> int)
  val progress_out : 'BatIO.output -> (unit -> unit) -> unit BatIO.output
  external cast_output : 'BatIO.output -> unit BatIO.output = "%identity"
  exception Overflow of string
  val read_byte : BatIO.input -> int
  val read_signed_byte : BatIO.input -> int
  val read_ui16 : BatIO.input -> int
  val read_i16 : BatIO.input -> int
  val read_i32 : BatIO.input -> int
  val read_real_i32 : BatIO.input -> int32
  val read_i64 : BatIO.input -> int64
  val read_float : BatIO.input -> float
  val read_double : BatIO.input -> float
  val read_string : BatIO.input -> string
  val read_line : BatIO.input -> string
  val write_byte : (int, 'a) BatIO.printer
  val write_ui16 : (int, 'a) BatIO.printer
  val write_i16 : (int, 'a) BatIO.printer
  val write_i32 : (int, 'a) BatIO.printer
  val write_real_i32 : (int32, 'a) BatIO.printer
  val write_i64 : (int64, 'a) BatIO.printer
  val write_double : (float, 'a) BatIO.printer
  val write_float : (float, 'a) BatIO.printer
  val write_string : (string, 'a) BatIO.printer
  val write_line : (string, 'a) BatIO.printer
  module BigEndian :
    sig
      val read_ui16 : BatIO.input -> int
      val read_i16 : BatIO.input -> int
      val read_i32 : BatIO.input -> int
      val read_real_i32 : BatIO.input -> int32
      val read_i64 : BatIO.input -> int64
      val read_double : BatIO.input -> float
      val read_float : BatIO.input -> float
      val write_ui16 : (int, 'a) BatIO.printer
      val write_i16 : (int, 'a) BatIO.printer
      val write_i32 : (int, 'a) BatIO.printer
      val write_real_i32 : (int32, 'a) BatIO.printer
      val write_i64 : (int64, 'a) BatIO.printer
      val write_double : (float, 'a) BatIO.printer
      val write_float : (float, 'a) BatIO.printer
      val ui16s_of : BatIO.input -> int BatEnum.t
      val i16s_of : BatIO.input -> int BatEnum.t
      val i32s_of : BatIO.input -> int BatEnum.t
      val real_i32s_of : BatIO.input -> int32 BatEnum.t
      val i64s_of : BatIO.input -> int64 BatEnum.t
      val doubles_of : BatIO.input -> float BatEnum.t
      val floats_of : BatIO.input -> float BatEnum.t
    end
  type in_bits
  type out_bits
  exception Bits_error
  val input_bits : BatIO.input -> BatIO.in_bits
  val output_bits : 'BatIO.output -> BatIO.out_bits
  val read_bits : BatIO.in_bits -> int -> int
  val write_bits : BatIO.out_bits -> nbits:int -> int -> unit
  val flush_bits : BatIO.out_bits -> unit
  val drop_bits : BatIO.in_bits -> unit
  val create_in :
    read:(unit -> char) ->
    input:(Stdlib.Bytes.t -> int -> int -> int) ->
    close:(unit -> unit) -> BatIO.input
  val wrap_in :
    read:(unit -> char) ->
    input:(Stdlib.Bytes.t -> int -> int -> int) ->
    close:(unit -> unit) -> underlying:BatIO.input list -> BatIO.input
  val inherit_in :
    ?read:(unit -> char) ->
    ?input:(Stdlib.Bytes.t -> int -> int -> int) ->
    ?close:(unit -> unit) -> BatIO.input -> BatIO.input
  val create_out :
    write:(char -> unit) ->
    output:(Stdlib.Bytes.t -> int -> int -> int) ->
    flush:(unit -> unit) -> close:(unit -> 'a) -> 'BatIO.output
  val wrap_out :
    write:(char -> unit) ->
    output:(Stdlib.Bytes.t -> int -> int -> int) ->
    flush:(unit -> unit) ->
    close:(unit -> 'a) -> underlying:'BatIO.output list -> 'BatIO.output
  val inherit_out :
    ?write:(char -> unit) ->
    ?output:(Stdlib.Bytes.t -> int -> int -> int) ->
    ?flush:(unit -> unit) ->
    ?close:(unit -> unit) -> 'BatIO.output -> unit BatIO.output
  val input_channel :
    ?autoclose:bool -> ?cleanup:bool -> Stdlib.in_channel -> BatIO.input
  val output_channel :
    ?cleanup:bool -> Stdlib.out_channel -> unit BatIO.output
  val to_input_channel : BatIO.input -> Stdlib.in_channel
  class in_channel :
    BatIO.input ->
    object
      method close_in : unit -> unit
      method input : Stdlib.Bytes.t -> int -> int -> int
    end
  class out_channel :
    'BatIO.output ->
    object
      method close_out : unit -> unit
      method flush : unit -> unit
      method output : Stdlib.Bytes.t -> int -> int -> int
    end
  class in_chars :
    BatIO.input ->
    object method close_in : unit -> unit method get : unit -> char end
  class out_chars :
    'BatIO.output ->
    object
      method close_out : unit -> unit
      method flush : unit -> unit
      method put : char -> unit
    end
  val from_in_channel : #BatIO.in_channel -> BatIO.input
  val from_out_channel : #BatIO.out_channel -> unit BatIO.output
  val from_in_chars : #BatIO.in_chars -> BatIO.input
  val from_out_chars : #BatIO.out_chars -> unit BatIO.output
  val bytes_of : BatIO.input -> int BatEnum.t
  val signed_bytes_of : BatIO.input -> int BatEnum.t
  val ui16s_of : BatIO.input -> int BatEnum.t
  val i16s_of : BatIO.input -> int BatEnum.t
  val i32s_of : BatIO.input -> int BatEnum.t
  val real_i32s_of : BatIO.input -> int32 BatEnum.t
  val i64s_of : BatIO.input -> int64 BatEnum.t
  val doubles_of : BatIO.input -> float BatEnum.t
  val floats_of : BatIO.input -> float BatEnum.t
  val strings_of : BatIO.input -> string BatEnum.t
  val lines_of : BatIO.input -> string BatEnum.t
  val lines_of2 : BatIO.input -> string BatEnum.t
  val chunks_of : int -> BatIO.input -> string BatEnum.t
  val chars_of : BatIO.input -> char BatEnum.t
  val bits_of : BatIO.in_bits -> int BatEnum.t
  val write_bitss : nbits:int -> BatIO.out_bits -> int BatEnum.t -> unit
  val default_buffer_size : int
  val synchronize_in : ?lock:BatConcurrent.lock -> BatIO.input -> BatIO.input
  val synchronize_out :
    ?lock:BatConcurrent.lock -> 'BatIO.output -> unit BatIO.output
  val lock : BatConcurrent.lock Stdlib.ref
  val lock_factory : (unit -> BatConcurrent.lock) Stdlib.ref
  val to_string : ('a, string) BatIO.printer -> '-> string
  val to_f_printer : ('a, 'b) BatIO.printer -> 'BatIO.f_printer
  val comb : 'BatIO.output * 'BatIO.output -> 'BatIO.output
  val make_enum : (BatIO.input -> 'a) -> BatIO.input -> 'BatEnum.t
  val get_output_id : 'BatIO.output -> int
  val get_input_id : BatIO.input -> int
  module Incubator :
    sig
      module Array :
        sig
          val pp :
            ?flush:bool ->
            ?first:string ->
            ?last:string ->
            ?sep:string ->
            ?indent:int ->
            (Stdlib.Format.formatter -> '-> unit) ->
            Stdlib.Format.formatter -> 'a array -> unit
        end
      module Enum :
        sig
          val pp :
            ?flush:bool ->
            ?first:string ->
            ?last:string ->
            ?sep:string ->
            ?indent:int ->
            (Stdlib.Format.formatter -> '-> unit) ->
            Stdlib.Format.formatter -> 'BatEnum.t -> unit
        end
      module List :
        sig
          val pp :
            ?flush:bool ->
            ?first:string ->
            ?last:string ->
            ?sep:string ->
            ?indent:int ->
            (Stdlib.Format.formatter -> '-> unit) ->
            Stdlib.Format.formatter -> 'a list -> unit
        end
    end
end