Haskell is compelling for profound reasons as well as profane ones. We focus on the latter on this page.

What do I look for in a practical programming language? First of all:

Programs should be easy to express.

Writing code should be comparable to writing prose. A plain text editor with 80-character columns should suffice. Coding should feel like writing an email or a novel. If instead it feels like filling out a tax return, then the language is poorly designed.

I have encountered languages that flaunt this law, none of which I will utter here. I have seen languages that practically force the programmer to run a heavyweight specialized IDE, and that require 14 words to print 2 words.

Haskell adheres to the zeroth law. Programs are so easy to express that interactive Haskell interpreters are practical. For example, to print "Hello, World!" in a Haskell session (online even!), just type:

> putStrLn "Hello, World!"

To turn this into a complete program that can be compiled:

main = putStrLn "Hello, World!"

Though really, a short "Hello, World!" program is unimpressive; it’s merely a basic requirement of a well-designed language.

Let us now dispel a common misconception, one which I once believed:

But times have changed. Modern Haskell handles side effects beautifully. Our “Hello, World!” program above proves this, and we shall see many other examples.

Moreover, it has become clear that:

Side effects are important and therefore should be easy to express. Pure functions are important and therefore should be easy to express. Indicating when a function is pure is important and therefore should be easy to express.

Most programming languages respect the first two laws; the third is the tricky one. Haskell is the first widespread language to follow all three laws.