Re-defined the 'Dao.EnumSet.EnumSet' data type to be a bit more intelligent: there are separate constructors for empty sets, infinite sets, and inverted sets now, and every operation on 'Dao.EnumSet.EnumSet's handles these constructors properly.
Created a new data NON-monadic enumerated set type, renamed all functions that operate on the monadic enumarated set type such that the name of each of those functions now has an "M" appended to it. This freed-up the names for all the other functions to be used with the NON-monadic enumeratd set type. I have also changed the API for "Dao.EnumSet" so that now it is very similar to "Data.Set", and therefore it must be imported qualified wherever it is used from now on.
I have cleaned-up the "Dao.EnumSet" API and fully re-factored all the code that depends on that module, even the testing modules. The testing program compiles and runs, but has already detected some errors, so more changes will be necessary.