The purpose of this book is to teach logic and mathematical reasoning in practice, and to connect logical reasoning with computer programming in Haskell. Haskell emerged in the last decade as a standard for lazy functional programming, a programming style where arguments are evaluated only when the value is actually needed. Haskell is a marvellous demonstration tool for logic and maths because its functional character allows implementations to remain very close to the concepts that get implemented, while the laziness permits smooth handling of infinite data structures.
This book does not assume the reader to have previous experience with either programming or construction of formal proofs, but acquaintance with mathematical notation, at the level of secondary school mathematics is presumed. Everything one needs to know about mathematical reasoning or programming is explained as we go along. After proper digestion of the material in this book the reader will be able to write interesting programs, reason about their correctness, and document them in a clear fashion. The reader will also have learned how to set up mathematical proofs in a structured way, and how to read and digest mathematical proofs written by others.
Without a doubt, the math contents of this book were over my head. I originally picked The Haskell Road more for its relation to functional programming than to anything else. For this reason, the chapters on induction, recursion and corecursion were more enlightening and understandable than any other section. For a kid with no formal mathematical training, though, the proofs in this book (mostly those in the later chapters) were often beyond my reach.
If an exercise like the following sounds like fun, you'll enjoy this book:
Show that the relation < on N is the transitive closure of the relation R = {(n, n + 1) | n in N}.
In many chapters, the Haskell exercises are few and far between, but were (for me) a lot of fun:
Give a corecursive program for producing the as a stream.
The most hard core programming language ever - Haskell - presented in a really different and thought provoking way. For those interested in this topics - functional languages, logics and mathematical foundations - i think it's must have.