Sun May 27 11:05:20 EDT 2018

Type-directed programming

Write down types, create an incomplete implementation using base
cases, then fill in more general cases, then abstract points keeping
it working.

Finally, a general standard type class structure emerges, so then
rewrite it to use that interfaces.

This will then point to other generalizations.