Thinking Functionally with Haskell,Richard Bird