The Haskell Road is a truly enjoyable little book.
What it is not: HR is not one of those vast towers of paper that introductory computer science books seem to have become. The kind of book that's called "Discrete Mathematics" and essentially contains all the stuff that nobody wants to teach but everyone wants you to know. Those books and the courses they support are often a student's first introduction to thinking about computing, and it's shameful. They are a patchwork of misaligned topics - and the students' thinking begins to resemble them, unsurprisingly.
Rather, the Haskell road is elegant - clean, concise, yet informal and approachable. Like the title says, it is an introduction to Logic, Maths and Programming. The book takes the enlightened viewpoint that these are unified concepts. The book begins by introducing basic Haskell syntax, and all of a sudden, we are implementing a prime number test. Simple; yes, but we also learn how to _prove_ that a procedure is a prime number test.
This approach continues throughout the book. The ideas of formal logic and deductive reasoning are made approachable by the fact that we implement the rules in Haskell. Sometimes, the exercise is in Haskell, and the answer is in logic. The point is that the reader is made from the first instant to see the equivalence, the shared foundations between these different means of expressing thought.
This is also one of the few books that teaches, explicitly, the means of proof. It does not do so abstractly, but quite straightforwardly, using the tools of formal logic. A few somewhat difficult chapters are the result (2-4); but they are greatly enlightened by enjoyable exercises. This treatment of proof was a first for me - though I am currently a graduate student, it made clear much that had been opaque to me. I read the chapters and did the exercises in a sitting; the following day (literally) I was finding my quantum computing proofs easier than I had the day before. Few books are able to have such a direct, jolting impact - indeed, that experience compelled me to write this review.
The exercises are not too difficult nor too easy; they are not all gathered at the end but rather placed in exactly the right place. Five minutes attempting an exercise is usually enough to see the trick of it. Some of them take seconds, however, and some take quite a long time. Those are marked as such. The exercises are the glue that sticks the book's ideas into the reader's mind, and it works.
The basic ideas of programming, like lists and functions are brilliantly intertwined with the equivalent ideas in mathematics, namely set theory. Haskell's lazy evaluation enables us to start puzzling about infinite sets early on. Throughout, one learns a reasoned, careful, elegant approach to programming. Too many students learn to program by throwing Java API calls at the problem until most of the output is correct. A more thorough, more disciplined mind can go much further, and the Haskell Road seeks to develop this.
I can't say enough good things about this book, so I will stop now. If you have been doing computer science for 30 years, or if it's your first day, or (especially!) if you're a programmer that wants to learn to do "real math" - this is the book for you.
This is a great book which I enjoyed reading and found more useful than other introductory Haskell texts with the exception of Bird, although it may not be the best choice if you are most interested in the practical aspects of the Haskell. The emphasis is on foundations and language features (which are all Haskell 98) are introduced as they occur naturally in the discussion of a number of Number Theory and Logic problems.
This book is well named -- it aims to teach the three disciplines of its title in equal measure and learning Haskell is presented as the channel for that, rather than being a goal in itself.