Why write a new Haskell Book?



We're writing this book because many have found learning Haskell to be difficult and it doesn't have to be.

Learning Haskell from the ground up is easier and works better - for both experienced hackers and people new to programming. The language is different enough from any you might've already tried that building up from the foundations will be less difficult and more enjoyable.

If you are an experienced programmer, we encourage you to forget what you might already know about programming and come at this course in Haskell with a beginner's mindset. If you are new to programming, you do not need to know another programming language before you start this book. Even experienced Haskellers have told us that they've found this book enriches their understanding of things they previously took for granted as magic or hadn't much thought about.

Haskell is not a difficult language to use.

Haskell is difficult to teach effectively.

So we've done something different from previous Haskell books.

Our approach is based on experience teaching Haskell to many people from a variety of walks of life, and the approach pays off. Spaced repetition and iterative deepening are effective strategies for learning, and we rely on those techniques throughout the book. You may notice we mention something only briefly at first, then return to it over and over. As your experience with Haskell deepens, you have a base from which to move to a deeper level of understanding. By working through exercises and returning to concepts you've seen earlier in the book, you develop a solid intuition for the functional style of programming.

This book is designed to help you get to a place where you could begin applying Haskell to the everyday problems you want to solve. It can also serve as a bootstrap suitable for beginning to learn programming language and type theory. Readers of this book have found that a facility for Haskell can translate into better F#, Scala, or Swift code. This is partly because Haskell pushes you to write the code you should be writing in functional'ish languages anyway.