Functional programming has its roots in Alonzo Church's lambda calculus. A functional program is a collection of functions that work together to transform data. Though LISP brought functional programming to public attention in the 1950s, it was John Backus's 1977 Turing Award lecture criticizing the limitations of imperative programming languages that led to a resurgence of interest in this field. The 1970s and 1980s saw a number of advances, leading to the development of the language Haskell, which carefully combined ideas from many earlier languages.
In the first part of this article, we explore some basic notions of functional programming using the language Haskell. In the second part, we examine more advanced concepts, including polymorphism, infinite data types and computations, and user defined data types.