Vorrei utilizzare Parsec makeTokenParser
per generare il mio parser, ma voglio utilizzare la mia definizione di whiteSpace
. La seguente sostituzione sostituisce whiteSpace
con la mia definizione, ma tutti i parser lexeme
utilizzano ancora la vecchia definizione (ad esempio, P.identifier lexer
utilizzerà il vecchio whiteSpace).WhiteSpace personalizzato utilizzando Haskell Parsec
...
lexer :: P.TokenParser()
lexer = l { P.whiteSpace = myWhiteSpace }
where l = P.makeTokenParser myLanguageDef
...
Guardando il codice per makeTokenParser
credo di capire perché funziona in questo modo. Voglio sapere se esistono soluzioni alternative per evitare la duplicazione completa del codice per makeTokenParser
?
Correlato: http://stackoverflow.com/questions/5672142/in-parsec-is-there-a--a-prevent-lexeme-from-consuming-newlines –