It would be Graham Hutton's Programming in Haskell. That one little chapter on parser combinators was totally worth it. If I can include this functional pearl "A play on regular expression", Not a book though. These two showed how composition and simple abstraction could make the solution super beautiful.
Programming in Haskell
2 readers recommend it across 2 discussions