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"