Exercises from Simon Thompson's The Craft of Functional Programming Second Edition