Basics of Haskell

As of March 2020, School of Haskell has been switched to read-only mode.

A gentle introduction to Haskell for beginners.

The prerequisite for this series of tutorials is some knowledge of imperative programming, whether C++, Java, Pascal, you name it. If you have some familiarity with functional programming, that's even better.

Since I came from an imperative background -- I can write some mean C++ code -- I'm familiar with the potential obstacles in embracing Haskell. There are many myths about functional programming, and Haskell in particular, that have no basis in reality. I will try to dispel them.

One such myth is that you have to know advanced mathematics (category theory in particular) to be a good Haskell programmer. This is not true, and you'll find no high math in this series of tutorials.

Another myth is that you can't do imperative programming in Haskell. This is technically true, in the sense that Haskell is able to reduce all imperative programming to pure functions, but in practice Haskell is the best imperative language that there is. For instance, it gives you full control over side effects. This is a nice thing in general, but it's a real life saver once you decide to write concurrent or parallel programs. In fact I was virtually pushed into functional programming by the necessities of concurrency. If the term "data race" is familiar to you, I don't need to convince you any more.