Change to using a monadic parser and play with threading line numbers and error messages through the lexer