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