Assignment 1: Designing complex data
Assignment 2: Delegation
Assignment 3: Tree-Shaped Data
Assignment 4: Accumulators
Assignment 5: Abstracting over Data Definitions