Functional programming is a programming style that emphasizes the use of functions (in contrast to object-oriented programming, which emphasizes the use of objects). It has become popular in recent years because of its simplicity, conciseness, and clarity. This book teaches functional programming using Haskell, the most popular purely functional language. The emphasis is on functional programming as a way of thinking and problem solving, using Haskell as a vehicle for expressing solutions. Rather than using conventional-arguably boring-examples from mathematics, which are commonly found in other programming language books, this tutorial uses examples drawn from multimedia applications, including graphics, animation, and computer music, thus rewarding the reader with working programs for inherently more interesting applications. The author also teaches how to reason about functional programs, using a very simple process of calculation.
Aimed at both beginning and advanced programmers, this tutorial begins with a gentle introduction to functional programming, including basic ideas such as values, types, pattern matching, recursion, higher-order functions, data structures, polymorphism, abstraction, lazy evaluation, and proof by calculation. It then moves rapidly on to more advanced topics, such as infinite data structures, type classes, higher-order types, IO, monads, and inductive proofs. Details about programming in Haskell are presented in boxes throughout the text for easy reference.
PAUL HUDAK
is Professor of Computer Science at Yale University. He was
instrumental in organizing and chairing the Haskell Committee, an international
group of computer scientists who designed Haskell, a nonstrict,
pure functional programming language. He is a cofounder and editor of
the Journal of Functional Programming. He has published over 100 papers
on the design and application of programming languages.
Hudak believes that programming languages should be pushed further
in the direction of high-level abstractions, in which the programmer says
less about the details of a computation and more about the problem
specification itself. At the same time, he recognizes the need for smart
compilation techniques to make such languages practical. His most recent
interest is in applying these principles to multimedia technology, including
computer music, graphics and animation, and robotics.