Mon Jul 3 13:29:04 EDT 2017


Main idea is to not have intermediates.  This can be done by keeping
the structure representation abstract:

- parse: use a generalized left fold, unflattening structure into a call sequence
- print: provide constructors, and use caller's function nesting to flatten structures


A cool thing here is that by keeping the output abstract, and the
generator pure, it is possible to re-generate chunks of the message.
This makes it possible to avoid buffering at the expense of higher CPU