let parse_error_to_string =
  let pos () a = Pos.to_string a in function
    | `malformed_meta (p, s) -> sprintf "malformed_meta (%a, %S)" pos p s
    | `malformed_row (p, err, s) ->
      sprintf "malformed_row (%s, %a, %S)"
        (parse_row_error_to_string err) pos p s
    | `malformed_header (p, s) -> sprintf "malformed_header (%a, %s)" pos p s
    | _ -> sprintf "unknown_error"