Programming in Haskell by Graham Hutton