I will eventually move this whole module into 'Dao.NewParser', for now it needs some slight improvement.
Again stealing ideas from Parsec, I have given 'Dao.NewParser.GenParserState' a user-definable state, which changes the type signature of everything related to 'Dao.NewParser.GenParser's, and also 'Dao.NewParser.GenLexer's because lexers can throw 'Dao.NewParser.GenParserErr's which now have a user-defined state reference (because it might be handy to see the state when a parser fails). However 'Dao.NewParser.GenLexer's do not actually use the user-definable state, when lexing the state is always the null value "()". Also, BUG FIX: I discovered that the monadic "fail" function would backtrack if it were evaluated at the end of token stream because it made use of 'Dao.NewParser.getCursor' which required there be at least one token to succeed. This has been fixed now.
Again stealing ideas from Parsec, I have given 'Dao.NewParser.GenParserState' a user-definable state, which changes the type signature of everything related to 'Dao.NewParser.GenParser's, and also 'Dao.NewParser.GenLexer's because lexers can throw 'Dao.NewParser.GenParserErr's which now have a user-defined state reference (because it might be handy to see the state when a parser fails). However 'Dao.NewParser.GenLexer's do not actually use the user-definable state, when lexing the state is always the null value "()". Also, BUG FIX: I discovered that the monadic "fail" function would backtrack if it were evaluated at the end of token stream because it made use of 'Dao.NewParser.getCursor' which required there be at least one token to succeed. This has been fixed now.
Added a combinator to modify the user-defined state of a parser.
Furthering completion of all parsers for the Dao abstract syntax tree. Nothing has been tested yet though.