Lists
intermediateA pair bundles two values. But what if you need three? Or ten? Or an unknown number?
A list is a chain of pairs, where each pair holds one element and a pointer to the rest. But a chain needs an end. How does a function walking the chain know when to stop?
This problem introduces a new type to the language, builds lists from pairs, discovers why the new type is necessary, and then puts it all together.