BOOK REVIEW: An Inlroduction to Functional Programming Systems Using Haskell by Antony J. T. Davie: (Cambridge University Press, 1992)

This book presents a very readable and understandable introduction to functional programming. It provides many concrete programming examples written in Haskell [see SIGPLAN Notices, May 1992] and discusses several design principles that seem to be unique to functional programming. I would recommend this book to all professional software developers for its discussion of software design using higher-order functions and streams. The book is perfect for an undergraduate course on functional programming. Haskell compilers are available from the research community, so students can get hands-on experience. Graduate students should be able to read this book on their own for an introduction to functional programming, the lambda calculus, polymorphic types, and combinatory logic. The bibliography provides a good set of initial pointers to the functional programming literature. The first chapter presents some of the background and history of functional programming. It points to the difficulty of using von Neumann's simple model of computing for developing complex software. Functional programming replaces the conventional step-by-step process of modifying individual storage cells with much higher-level declarative specifications. Among other advantages, this simplifies reasoning about programs and opens new possibilities for parallel execution. Chapter 2 starts the discussion of Haskell, illustrating simple expressions and the compiler's interactive execution mode. Haskelrs basic types, operations, and expression syntax are covered. The differences between HaskeU and generally accepted programming language syntax for expressions are pointed out. These differences seem small at first but can be seen later to have a significant impact on programming style. Chapter 3 presents some of the important techniques and design principles used in functional programming. It continues the illustrative approach with examples of recursive functions, higher-order function-forming operations, and operations on lists. Chapter 4 discusses Haskell's type system. It starts with simple type construction operations for functions, tuples, and lists. It then proceeds to Haskelrs polymorphic types, overloading, algebraic types, abstract types, and type inference mechanism. Polymorphic types allow definition, for example, of functions such as "length" which can be applied to any list, regardless of the type of its elements. Rather than simply checking for type consistency, the Haskell compiler attempts to infer the type of each expression. In addition to finding type inconsistencies and coding errors, this approach often produces more general interpretations of expression types than you might expect. Chapter 5 introduces the lambda calculus. Some people will regard this chapter as the corner stone of the book, since the R-calculus …