Hack Parsec

Parsecを少し改造*1した。

whiteSpaceなどの定義を(矛盾無く)変更できるようにした。

module Test where
import Text.ParserCombinators.Parsec as P
import Text.ParserCombinators.Parsec.Language as P
import Text.ParserCombinators.Parsec.Char as P
import qualified Text.ParserCombinators.Parsec.Token as P

test1 = parse (symbol "A" >> symbol "BB") "" "AccBBaa"
  where
    symbol = P.symbol lexer
    lexer = (P.makeTokenParser P.emptyDef) 
              { P.whiteSpace = many1 (oneOf "ac") >> return () }

test2 = parse (symbol "A" >> symbol "BB") "" "AccBBaa"
  where
    symbol = P.symbol lexer
    lexer = P.makeModifiedTokenParser P.emptyDef 
              (\p -> p { P.whiteSpace = many1 (oneOf "ac") >> return () })
*Test> test1
Left (line 1, column 2):
unexpected "c"
expecting "BB"
*Test> test2
Right "BB"

追記(2005-02-15)

*1:少し改造後のソースはここ。fptoolsの下からparsecだけコピーしたのでmakeと打ってもmakeされません