The problem about functional programming (FP) is always the same: you need to change the way you think. This is really a tough challenge for an author, and this book meets the challenge! The concepts are taught by the supplemented examples and exercises, together with an excellent index and an easy-to-understand writing style. This mix makes the book a real blast, because you can only learn FP / Haskell programming by doing it, and doing it and doing it till you have enough practice and a real understanding of what you are doing, and the well-chosen exercises are really needed. The book prefers a "toolkit" approach, meaning using "tools" first, and then take a look inside later, much unlike other FP books. You could say the "why" comes before the "how". A "downside" is that the author tries to teach how to mathematically prove functions, a topic that requires a bit too much of a reader not knowing already, I guess. But overall this seems to be the only really good introduction to FP, especially because it focuses on Haskell. If you are willing to work with the book, you will really experience FP as a craft, an advanced, high-level way of coding programs.