Think learning Haskell is difficult?

It doesn't have to be.

Welcome to a new way to learn Haskell.

Perhaps you are coming to this book frustrated by previous attempts to learn Haskell.
Perhaps you have only the faintest notion of what Haskell is.
Perhaps you were just looking for the 18 billionth* monad tutorial, certain that this time around you will understand monads once and for all.

Whatever your situation - it is our goal to make Haskell as clear, painless, and practical as we can, no matter what prior experiences you're bringing to the table.

*rough estimate



The book is now complete and has had its final digital release!

Click here to learn what the book covers

Why write a new Haskell Book?

Christopher Allen,
Julie Moronuki

(more about us)

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.

What's in the book?

Book Cover

Getting the basics

  • Lambda Calculus
  • Hello Haskell
  • Printing Strings
  • Basic Datatypes

Defining and combining

  • Types
  • Typeclasses
  • More functional patterns
  • Recursion
  • Lists
  • Folding Lists

Getting serious

  • Algebraic Datatypes
  • Maybe, Either, and kinds

Getting real

  • Building projects in Haskell
  • Testing

Common structures

  • Monoid, Semigroup
  • Functor
  • Applicative
  • Monad (SPOOKY? No.)

Factoring out patterns

  • Foldable
  • Traversable
  • Reader
  • State
  • Parsers
  • Composing Types
  • Monad Transformers

Operational concerns and deep mysteries

  • Non-strictness
  • Commonly used data structures
  • Demystifying IO
  • Exceptions

Final Project

  • Networked TCP madness

read more about the content

 Get a taste

Download a sample (95 pages)
(includes the introduction, second, and third, and fourth chapters)

First chapter not included. Note that the PDF will look janky in Firefox's PDF.js renderer. Adobe Acrobat, Google Chrome, evince, and are all tested and known to render the book properly.

Some reader voices

(follow us @haskellbook)

read more (and longer) reviews