I broke several constructors off of the 'Dao.Evaluator.AST_Object' and into their own new data type called 'Dao.Evaluator.AST_LValue'. An LValue expression is essentially any expression that can represent some point in some data structure that can be both executed (or read) AND updated (or written). I am still hammering out the bugs caused by this changed in the language specification, but I think this change will eliminate many of the ambiguities in the abstract syntax tree that had existed before.
I changed the infix parser table API just a bit: the infix constructor functions, 'Dao.Parser.InfixConstr' and 'Dao.Parser.OpPrec', which used to construct the tables, are now monadic functions rather than pure functions like they were before. This allows the infix constructor functions to accept or reject parses, which I realized was necessary in some cases after making some changes to the Dao scripting language's abstract syntax tree.
Updated the parser to reflect the recent changes to the Dao scripting language's abstract syntax tree.
I am further breaking down the larger nodes of the abstract syntax tree into smaller pieces, particularly the 'Dao.Evaluator.AST_Object' node. This makes the syntax tree more strict which makes it easier instantiate the 'Dao.PPrint.pPrint' and 'Dao.Random.randO' for these nodes such that the 'Dao.Random.randO' function cannot produce syntactic structures that are impossible to parse.  Consequently, the randomly generated test structures are more expressive and have been catching more errors. I have already uncovered some more bugs in the Dao scripting language's parser, but they have not been fixed yet.