sig
  type 'a elem = string
  type initial = unit
  val reader : unit -> in_channel -> initial elem
  val of_string : unit -> string -> initial elem
  val string_of : unit -> 'a elem -> string
end