Amazing book! As a newcomer to Functional Programming, this book really helps to break down the subject into small understandable chunks. The exercises are great at cementing what has been covered in the chapter too.
Before getting this book, I had tried various well-known resources for learning Haskell, including Miran Lipovaca's 'Learn You a Haskell' and Simon Thompson's 'Haskell: The Craft of Functional Programming'. None of these managed to get me engaged enough to keep going for much longer than a few hours.
This book — Graham Hutton's 'Programming in Haskell' — get's it right. Graham strikes a good balance between short, but decent theoretical explanations and practical exercises. If you are anything like me and need to use new information in practise in order to assimilate it, you will appreciate the many opportunities this book gives to do exactly this.
The chapters aren't dense at all. In chapter 5 of 17, the reader is guided through an implementation of the Caesar Cipher in nine lines of extremely easy to understand code — five lines excluding the type-signatures, which are there mainly for documentation purposes. The code isn't introduced all at once, but beautifully worked out step-by-step under the reader's eyes (and within the scope of anyone's understanding!).
Moreover, Graham then shows how to implement a function that takes caesar-enciphered text, finds the secret key and deciphers the whole thing — all automatically based on simple maths. The whole implementation is so well explained, that I was able to come up with my own version just from reading his explanations and without looking at the code, which I covered up. This felt really empowering and it was very eye-opening to notice differences between his implementations and mine.
I don't regret buying 'Programming in Haskell' when it was released two weeks ago. I have worked through almost a third of it now, even though I don't have that much time. Graham has managed to make it so addictive, that I keep "forgetting" about chores to buy myself some time with this book and — oh boy does it make time fly!
If you've read this review until here, then don't stop now, because I have a little secret. I actually found this book because I was following Erik Meijer's Functional Programming 101x lectures on edx.org, which I strongly advise you should also have a look at if you haven't already — it is completely free. Erik just delivers in the most entertaining and unpretentious way possible. This book (its first edition, to be precise) is the recommended companion for Erik's lectures and the two go together like bread and butter.
If you are worried that Haskell is too difficult for you, then don't be. I am a second year undergraduate student of Computer Science and have been studying Java at university so far. I think Haskell makes much more sense than Java and any of the other languages I have seen so far. Don't shy away from Haskell, whether you are a n00b or an old hand — it's beautiful and this book makes understanding it straightforward.
Bottom line: buy this book or pester someone to buy it for you. It's worth it.