Haskell is a programming language that grew out of a late-1980s effort to unify the many competing lazy functional languages into a single common standard. According to the language report, Haskell is “a general purpose, purely functional programming language incorporating many recent innovations in programming language design.” Its design provides higher-order functions, non-strict semantics, static polymorphic typing, user-defined algebraic datatypes, pattern matching, a module system, and a monadic I/O system.
The language was the work of a committee rather than a single author. As the designers recount in “A History of Haskell: Being Lazy with Class,” the project began at a 1987 meeting and produced its first report in 1990, with the goal of consolidating research on non-strict, purely functional languages so that work would not be fragmented across a dozen incompatible dialects. The language was named after the logician Haskell Curry.
Two ideas sit at the center of Haskell’s design. It is non-strict, meaning expressions are evaluated lazily, only when their values are needed; and it is pure, meaning ordinary functions cannot perform side effects. As the official site describes it, every function in Haskell is “a function in the mathematical sense,” and the language “features referential transparency, immutability and lazy evaluation.”
Reconciling purity with real-world input and output was a significant challenge, and the answer the committee adopted, monadic I/O, became one of Haskell’s most influential contributions. Through its main implementation, the Glasgow Haskell Compiler, the language has served for decades as a laboratory for type systems and functional programming ideas that later spread to other languages.