Decided to add another algorithm for encoding 'Prelude.Integer's: 'Dao.String.putPosVLInteger', and 'Dao.String.getPosVLInteger'. This algorithm differs slightly from 'Dao.String.putVLInteger' and 'Dao.String.getVLInteger' in that the sign of the integer must be encoded into the resulting bit stream, which means the final octet uses the two high-order bits, one for the escape bit delimiting the end of the integer bytes, and one delimiting the sign of the integer, which means the final octet only uses 6 bits for storing the integer value instead of 7.

But when writing an algorithm that predicted the number of bits an integer value should have based on a length value, I found it was much easier to make the simplifying assumption that every octet contained 7 bits of information, rather than every octet containing 7 except for the final bit. The two new APIs I wrote today will assume you have passed a positive 'Prelude.Integer' (and it is checked with 'Control.Exception.assert') and encode the 'Prelude.Integer' with every octet containing 7 bits of information and 1 escape bit. I think this will also be handy elsewhere.
Added all of the function necessary for indexing types on the fly during encoding of objects, and storing the types, and retrieving the types on the fly while decoding and selecting the correct decoder for a type from the provided table of decoders. This is the main reason, the functionality I needed, that motivated me to write an entire wrapper around the "Data.Binary" module.
Wired the new "Dao.Binary" module to the "Dao.Object.Binary" module using the 'Dao.Object.MethodTable'. The new prototype of the binary serialization system is pretty much complete, but I still have not got the test program to build.