Programming in Haskell 2nd Edition