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