Python type annotations have a fairly steep learning curve. First it's all `name: str` and suddenly it's all Unions and Optionals and TypedDicts. These are some exercises to get from the basics to the advanced stuff, with some background on why you'd want to do it in the first place. It's meant to be used either for self-study or in a highly interactive group. I've tried to use realistic examples of code you might actually want to write.<p>Thanks to my employer, Toitū Te Whenua LINZ, for giving me the time to build this!