Made five gradual, simultaneous updates to the "Dao.NewParser" module:
(1) Redefined 'Dao.NewParser.LexBuilder' so it is no longer polymorphic over 'Dao.NewParser.TokenType', it was not necessary. Internally, the 'Dao.NewParser.TT' is used to construct everything and conversion from 'Dao.NewParser.TT' to the 'Dao.NewParser.TokenType' is performed when the 'Dao.NewParser.TokenDB' is constructed.
(2) Aligned the context of every function in the "Dao.NewParser" module that is polymorphic over token types, now the context explicitly declares that the polymorphic token type must instantiate 'Dao.NewParser.TokenType', which is a superclass of 'Data.Ix.Ix', 'Prelude.Eq', and all the other classes that used to restrict the polymorphic token type. This 'Dao.NewParser.TokenType' class restriction is consistent everywhere now.
(3) Changed the 'Dao.NewParser.checkTokenAndString' and 'Dao.NewParser.checkToken' fields of the 'Dao.NewParser.ParserTable' constructor to now make use of 'Data.IntMap.IntMap', and map the 'Dao.NewParser.intTT' value of every 'Dao.NewParser.TT' value to each 'Dao.NewParser.Parser' value wherever a 'Dao.NewParser.ParserTable' is constructed.
(4) Defined the 'Dao.NewParser.MetaToken' class, and the 'Dao.NewParser.token', 'Dao.NewParser.tokenVal', and 'Dao.NewParser.tokenPos' functions.
(5) Defined the 'Dao.NewParser.HasTokenDB' class, and the 'Dao.NewParser.tokenName' and 'Dao.NewParser.tokenNamePos' functions. Modified the 'newCFGrammar' function to automatically infer the type of 'Dao.NewParser.Lexer' for any given 'Dao.NewParser.Parser' function by the association between the 'Dao.NewParser.TokenType' and the 'Dao.NewToken.tokenDBLexer' given by the 'Dao.NewParser.HasTokenDB' class.
Made five gradual, simultaneous updates to the "Dao.NewParser" module:
(1) Redefined 'Dao.NewParser.LexBuilder' so it is no longer polymorphic over 'Dao.NewParser.TokenType', it was not necessary. Internally, the 'Dao.NewParser.TT' is used to construct everything and conversion from 'Dao.NewParser.TT' to the 'Dao.NewParser.TokenType' is performed when the 'Dao.NewParser.TokenDB' is constructed.
(2) Aligned the context of every function in the "Dao.NewParser" module that is polymorphic over token types, now the context explicitly declares that the polymorphic token type must instantiate 'Dao.NewParser.TokenType', which is a superclass of 'Data.Ix.Ix', 'Prelude.Eq', and all the other classes that used to restrict the polymorphic token type. This 'Dao.NewParser.TokenType' class restriction is consistent everywhere now.
(3) Changed the 'Dao.NewParser.checkTokenAndString' and 'Dao.NewParser.checkToken' fields of the 'Dao.NewParser.ParserTable' constructor to now make use of 'Data.IntMap.IntMap', and map the 'Dao.NewParser.intTT' value of every 'Dao.NewParser.TT' value to each 'Dao.NewParser.Parser' value wherever a 'Dao.NewParser.ParserTable' is constructed.
(4) Defined the 'Dao.NewParser.MetaToken' class, and the 'Dao.NewParser.token', 'Dao.NewParser.tokenVal', and 'Dao.NewParser.tokenPos' functions.
(5) Defined the 'Dao.NewParser.HasTokenDB' class, and the 'Dao.NewParser.tokenName' and 'Dao.NewParser.tokenNamePos' functions. Modified the 'newCFGrammar' function to automatically infer the type of 'Dao.NewParser.Lexer' for any given 'Dao.NewParser.Parser' function by the association between the 'Dao.NewParser.TokenType' and the 'Dao.NewToken.tokenDBLexer' given by the 'Dao.NewParser.HasTokenDB' class.