I was obviously not thinking clearly when I had instantiated 'Dao.Predicate.PValue' and 'Dao.Predicate.PTrans' into the 'Control.Monad.Error.MonadError' class, because my previous instantiation required all error types to be of type 'Dao.String.UStr'. I have fixed this, now it should be much more useful.
The new parser is starting to look nice. I am still not sure if it will be better than the current parser, but I have a very good feeling about it.