open UPervasives

module type Type = sig
  val open_out : 
      ?normalization:[ `Off | `NFC ] -> 
	?encoding:string -> 
	  string -> 
	    utf8_out_channel
  val open_out_gen : 
      open_flag list -> 	
	int -> 
	  ?normalization:[ `Off | `NFC ] ->
	    ?encoding:string -> 
	      string -> 
		utf8_out_channel
  val flush : utf8_out_channel -> unit
  val output_char : utf8_out_channel -> uchar -> unit
  val output_string : utf8_out_channel -> string -> unit
  val close_out : utf8_out_channel -> unit

  val open_in : 
      ?normalization:[ `Off | `NFC ] ->
	?encoding:string -> 
	  string -> 
	    utf8_in_channel
  val open_in_gen :
      open_flag list -> 
	int -> 
	  ?normalization:[ `Off | `NFC ] ->
	    ?encoding:string -> 
	      string -> 
		utf8_in_channel
  val input_char : utf8_in_channel -> uchar
  val input_line : utf8_in_channel -> string

  val stdin : utf8_in_channel
  val stdout : utf8_out_channel
  val stderr : utf8_out_channel

  val print_char : uchar -> unit
  val print_string : string -> unit
  val print_endline : 
      ?newline:[ `CR | `CRLF | `LF | `ULS ] ->
	string -> unit
  val print_newline : 
      ?newline:[ `CR | `CRLF | `LF | `ULS ] ->
	unit -> unit
	    
  val prerr_char : uchar -> unit
  val prerr_string : string -> unit
  val prerr_endline : 
      ?newline:[ `CR | `CRLF | `LF | `ULS ] ->
	string -> unit
  val prerr_newline : 
      ?newline:[ `CR | `CRLF | `LF | `ULS ] ->
	unit -> unit

  val read_line : unit -> string

  val (^) : string -> string -> string
end
