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.
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
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!"
With only a very limited grasp of functional programming, the frequent and insightful comments I received were invaluable in getting to know the language.
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.
These are a few of the 89 exercises on the Haskell track. You can see all the exercises here.