Haskell is a language with excellent capabilities for abstraction. It allows you to quickly develop correct programs that are close to a given specification. At the center of the language is its type system: types that do not get in the way because they can be inferred; types that can be polymorphic and overloaded in various ways; types that explicitly tag functions with side-effects. These features make Haskell unique even among functional languages. Because of its uncompromising approach, Haskell is ideally suited for learning about functional language concepts. At the same time, Haskell comes with an excellent optimizing compiler, lots of tools and libraries for practical use, and an amazingly helpful community.