[Haskell-cafe] An irritating Parsec problem
Evan Laforge
qdunkan at gmail.com
Wed Oct 15 17:16:49 EDT 2008
Here's what I have in one file:
-- | Parse the text of an event with the given parser @p at .
parse :: (Monad m) => P.CharParser () a -> String -> Derive.DeriveT m a
parse p text = do
(val, rest) <- case P.parse (p_rest p) "" text of
Left err -> Derive.throw $
"parse error on char " ++ show (P.sourceColumn (P.errorPos err))
++ " of " ++ show text ++ ": " ++ Seq.replace "\n" "; "
(show_error_msgs (Parsec.Error.errorMessages err))
Right val -> return val
unless (null rest) $
Derive.warn $ "trailing junk: " ++ show rest
return val
-- Contrary to its documentation, showErrorMessages takes a set of strings
-- for translation, which makes it hard to use.
show_error_msgs = Parsec.Error.showErrorMessages
"or" "unknown parse error" "expecting" "unexpected" "end of input"
p_rest :: P.GenParser tok st t -> P.GenParser tok st (t, [tok])
p_rest p = do
val <- p
rest <- P.getInput
return (val, rest)
And this reminds me of something I was going to ask about: it would be
nice to fix either the documentation for showErrorMessages or the
implementation. Preferably the implementation, because I can't see
the current implementation actually being useful for translation...
More information about the Haskell-Cafe
mailing list