Use monadic lexer to keep positions of tokens
Use polymorphic abstract syntax tree with annotation
Add position annotation to Ast