Did some house cleaning.
The 'Dao.Object.ContErr' and 'Dao.Object.ContErrT' had such uninspiring names. I have renamed them to 'Dao.Object.FlowCtrl' and 'Dao.Object.Procedural' (respectively) and renamed any functions operating on these types to reflect the name change.
Changed the name of the 'Dao.Object.runExecScript' function to 'Dao.Object.runExec', and changed the name of the 'Dao.Object.execScriptRun' function to 'Dao.Object.inExecEvalRun', which I believe are much less confusing names.
Fixed the algorithm that matches input strings to patterns, and also fixed a related deadlock bug.
Created the 'Dao.Object.ActionGroup' and 'Dao.Object.Task' data types. This time they are much simpler than they were in my previous implementation of 'Task'. These new types make the flow of evaluation in the 'Dao.Object.Run' monad much more clear, easier to understand, and easier to debug. I still need to fix the mechanism that evaluates BEGIN/END, and SETUP/TAKEDOWN scripts.
Tweaked the debugging thread, now all exceptions are caught so the debugger can do a proper shut-down, even if it is terminated by an uncaught exception from a child thread.
The instantiation of 'Prelude.Show' for the 'Dao.Parser.Location' data type had been written before I added the 'Dao.Parser.NoLocation' constructor. I fixed the instance of 'Prelude.Show' to return a null string for 'Dao.Parser.NoLocation'.
The BEGIN and END scripts were not being evaluated, I fixed this bug. Dao is now back up and running exactly as it is supposed to!
Disabled debugging. Now I am ready to continue adding features. Smooth sailing from here on! (hopefully)