Mutually recursive data types, part 1
Mutually recursive data types, part 2