Lexer uses State monad