sig
  exception Invalid_char
  val str_encode : string -> string
  val str_decode : string -> string
  val encode : (char, 'a, 'b) IO.output -> (char, string, 'b) IO.output
  val decode : (char, 'a) IO.input -> (char, string) IO.input
end