Updated the definition of 'Dao.Object.Reference', file and program references are no longer "built-in" to this type. This is because I have started work on an object-oriented mechanism for mapping arbitrary Haskell data types to Dao objects; object that can be evaluated by any part of the "Dao.Evaluator" provided that the correct methods are provided. This will be done with the 'Dao.Object.ObjectInterface' data type and the 'Dao.Object.ObjectClass' class.
I have also created the 'Dao.Object.ExecError' data type and modified the 'Dao.Object.Exec' monad such that the instantiation of 'Control.Monad.Error.MonadError' now 'Control.Monad.Error.throwError' type is the 'Dao.Object.ExecError' type.
I am going to try for a new object-oriented evaluation model, where arbitrary Haskell data types can be used as objects that can be evaluated in equations, passed as arguments to functions, be assigned to, updated, dereferenced, indexed with a subscript, or called as a function. A single data structure, 'Dao.Object.ObjectInterface' contains functions for doing all of these things, and a Haskell data type can instantiate a Haskell class called 'Dao.Object.ObjectClass' which maps a 'Dao.Object.ObjectInterface' to that data type. A 'Dao.Object.DaoClassDef' monad is provided to make it easier to construct a 'Dao.Object.ObjectInterface' data type.
During evaluation, the various mechanisms in the "Dao.Evaluator" monad will use the 'Dao.Object.ObjectInterface' associated with each object to select the correct evaluation semantics.  For example, if an object is on the left-hand side of the equals sign, the evaluator checks if there has been an update operator defined for that object, and if so, uses that update operator to perform the assignment.