functor (R : READER->
  sig
    type source = R.source
    val parse : source -> 'a t -> ('a, error) result
    val parse' : source -> 'a t -> ('a, string) result
    val parse_exn : source -> 'a t -> 'a
  end