The wrapper monad I had written for 'Data.Binary.Get.Get' was not completely correct. The instantiation of 'Control.Monad.MonadPlus' was behaving strangely, failures were always being reported at byte position zero, regardless of where in the byte string the error occurred. It was a simple matter to wrap the 'Control.Monad.State.StateT' transformer for 'Dao.Binary.GGet' into a 'Dao.Predicate.PTrans' predicate transformer so as to make 'Control.Monad.fail' and 'Control.Monad.mplus' behave correctly. I have incorporated these changes into the rest of the program, and a few more bugs have been uncovered, it seems the previous implementation may have been a bit too lazy. Anyway, I the new implementation of 'Dao.Binary.GGet' is working correctly now, or at least, much more correctly than before.
Worked out a few more bugs in the random object generator, parser, and pretty printer.