Lexer
data Token
data PState
data P a
data ParseResult a