Learning Template Haskell (to generate ADTs and functions on those ADTs).