Parsec.Error:errorMessages, messageString
Prelude> :m Text.ParserCombinators.Parsec Prelude Text.ParserCombinators.Parsec> :t errorMessages <interactive>:1:0: Not in scope: `errorMessages' Prelude Text.ParserCombinators.Parsec> :m Text.ParserCombinators.Parsec.Error Prelude Text.ParserCombinators.Parsec.Error> :i errorMessages errorMessages :: ParseError -> [Message] -- Defined in Text.ParserCombinators.Parsec.Error Prelude Text.ParserCombinators.Parsec.Error> :t errorMessages errorMessages :: ParseError -> [Message]
module Main where import Text.ParserCombinators.Parsec import Text.ParserCombinators.Parsec.Token import Text.ParserCombinators.Parsec.Language import Text.ParserCombinators.Parsec.Error lexer :: TokenParser () lexer = makeTokenParser(javaStyle) run :: Show a => Parser a -> String -> IO () run p input = case (parse p "" input) of Left err -> do{ putStr "parse error at " ; mapM_ (print . messageString) (errorMessages err) } Right x -> print x
で、
Prelude> :l 20090130_parsec00.hs [1 of 1] Compiling Main ( 20090130_parsec00.hs, interpreted ) Ok, modules loaded: Main. *Main> run (identifier lexer) "abc" Loading package parsec-2.0 ... linking ... done. "abc" *Main> run (identifier lexer) "123" parse error at "\"1\"" "identifier"