Working through the problems in Programming in Haskell by Graham Hutton