Haskell

Join the Haskell Track
Haskell is a functional programming language which is pure and statically-typed. It's known for lazy evaluation, where evaluation is deferred until necessary, and its purity, where monads are used for working with side-effects.
Track mentors

10 Mentors

Our mentors are friendly, experienced Haskell developers who will help teach you new techniques and tricks.
Track students

4,035 Students

Join thousands of students who have enjoyed learning and improving their skills by taking this track.
Track exercises

89 Exercises

Hundreds of hours have gone into making these exercises fun, useful, and challenging to help you enjoy learning.

About Haskell

Haskell is a purely functional, lazy, statically-typed programming language with type inference.

Functional means that functions are first-class data types.

Purely Functional means (roughly) that there are no side effects. Every function will always return the same value for a given argument will do nothing else.

Lazy (a.k.a "non-strict") means that the compiler will put off evaluating a thing until absolutely neccessary. This lets you safely do weird stuff like operating on an infinite list--the language will only create it up to the last value you actually use.

Statically-typed means that identifiers have a type set at compile time--like those in Java, C++ or C#--instead of holding data of any type like those in Python, Ruby or JavaScript.

Type inference means that the compiler will often figure out the type of an identifier by itself so you don't have to specify it. Scala and later versions of C# both do this.

Haskell syntax is beautiful and minimal. For example, here is an implemention of quicksort in 6 lines:

quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
    let smallerSorted = quicksort [a | a  x]
    in  smallerSorted ++ [x] ++ biggerSorted

(source)

In addition, Haskell is standardized and has multiple high-quality implementations, some of which produce standalone native binaries. There is also a collection of free third-party libraries available and a package manager ("cabal") to automatically fetch them for you.

Join the Haskell track
module HelloWorld (hello) where

hello :: String
hello = "Hello, World!"

To me, the standout track has been the Haskell track.

With only a very limited grasp of functional programming, the frequent and insightful comments I received were invaluable in getting to know the language.

Relaxed. Encouraging. Supportive.

Meet the Haskell Track mentors

Once you join the Haskell language track, you will receive support and feedback from our team of mentors. Here are the bios of a few of the mentors of this track.

Avatar of Frerich Raabe

Frerich Raabe https://github.com/frerich

I've been using Haskell on and off for the last eight years, and maintain a few Haskell packages. I believe knowing some Haskell makes you a better programmer in any other language and try to practice it whenever possible.
Avatar of Peter Tillemans

Peter Tillemans https://github.com/ptillemans

I am an electronics engineer and language geek who learned programming on an hp-41 and C-64. Now I do mostly java, javascript, python, rust and haskell. I believe that code should sing its intent so the last row in the hall understands the last syllable.
Avatar of Simon Hafner

Simon Hafner https://github.com/reactormonk

type-driven development evangelist
Avatar of Kieran Trezona-le Comte

Kieran Trezona-le Comte https://github.com/trezona-lecomte

I enjoy writing Haskell because of its power and robustness. I also love that it stretches my brain in weird and wonderful ways.
Avatar of Brooks J Rady

Brooks J Rady thelostlambda.xyz

A functional programmer who loves Haskell, Lisp, Rust, and Elixir.
Avatar of Adrian King Legaspi

Adrian King Legaspi https://github.com/akilegaspi

Generally a Purely Functional Programming advocate and Professional Software Engineer in Scala/Haskell
Fun. Challenging. Interesting

Community-sourced Haskell exercises

These are a few of the 89 exercises on the Haskell track. You can see all the exercises here.

Isogram
easy
misc
Atbash Cipher
medium
misc
Rail Fence Cipher
medium
misc
Matrix
medium
define type
Roman Numerals
medium
maybe
Queen Attack
medium
maybe

Get started with the Haskell track. As with everything on Exercism, it's 100% free!

Join the Haskell Track