Thoroughly cleaned-up the "Dao.NewParser" module, and introduced the 'Dao.NewParser.MonadParser' class into which several parsing functions were consolidated. Many of the functions have been renamed, for example, 'Dao.NewParser.parseEOF' is now 'Dao.NewParser.guardEOF' and a member of the 'Dao.NewParser.MonadParser' class. 'Dao.NewParser.GenParseError' is now simply called 'GenError'. I renamed 'Dao.NewParser.GenParser' to 'Dao.NewParser.ParseTable' and 'Dao.NewParser.GSTP' to 'Dao.NewParser.GenParser'. I then instantiated 'Dao.NewParser.TokStream', 'Dao.NewParser.ParseTable', and 'Dao.NewParser.GenParser' into the 'MonadParser' class, and re-defined as many of the functions as I could to make use of these functions. I modified the instantiation of all of these parsers into the 'Control.Monad.Error.Class.MonadError' class such that 'Dao.NewParser.GenError' now specifically stores the 'Dao.NewParser.TokStreamState' state, not just the polymorphic type reserved for arbitrary user-state types.
Eliminated the 'Prelude.Enum' constraint on the polymorphic token type for tokenizers and parsers. It just wasn't necessary like I thought it would be.
Cleaned up the comments a lot, also wrote a simple example in the comments which should look nice when Haddock gets done with it. Added the 'Dao.NewParser.fromString' and 'Dao.NewParser.fromUStr' functions. Changed 'Dao.NewParser.GenCFGrammar' so that it now contains a 'Dao.NewParser.ParseTable' value rather than a 'Dao.NewParser.TokStream' value. Now, anyone creating a parser from a 'Dao.NewParser.GenParser' and storing this parser at the top level of their program has a good chance that the compiler will inline all of the 'Data.Array.IArray.Array's in the 'Dao.NewParser.ParseTable' early on in the program, perhaps caching the arrays so once the parser is initialized into memory, it will stay there, which I am hoping will improve performance.