Derive Show for ease of experimentation
Represent Term as a tree of combinators
Rewrite parsing and rendering in terms of Trees
Rearrange functions
Extract the tree parser for reuse