The first variant of this article was published in the first issue of Russian magazine
"Practice of functional programming", but I decided to continue to maintain it, as more
books were released (Russian version of this article also includes description of books
published in Russian). You can leave comments and suggestions in the comment widget on
this page, or send them to me via e-mail.
If you will order some of these books, please (if possible), use links from this page —
this allows me to buy new books and add them to review.
Functional programming has very long history and a lot of books was released in paper &
electronic forms. These books covers all areas, from theoretical foundations of functional
programming to programming in concrete languages & frameworks.
Functional Programming in General
In this list I tried to collect books, that are dedicated to functional programming in
general, including theoretical foundations of lamda-calculus, etc.:
- Structure and Interpretation of Computer Programs — classical textbook on foundations
of programming, but it provides introduction to functional programming techniques &
uses Scheme as main language. The full version is also available
online on site of MIT Press;
- Purely Functional Data Structures — wonderful book by Chris Okasaki on how to work
with complex data structures in pure functional programming languages. I need to
mention, that there is freely available theses with the same name, but book's content
is slightly different from them;
- The Functional Approach to Programming book by Guy Cousineau & Michel Mauny), describes
functional programming in general and could be used as a textbook (with examples in
- Introduction to Functional Programming — lecture notes for FP course by John Harrison
that he taught in Cambridge University. This course provides description of
lambda-calculus, introduction to types and shows how this could be used in Caml Light;
- An Introduction to Functional Programming Through Lambda Calculus — one more
introduction to functional programming & lambda calculus;
- The Pearls of Functional Algorithm Design book by Richard Bird, shows how to implement
different tasks & algorithms using functional programming;
- The Algorithms: A Functional Programming Approach describes implementation of different
algorithms (including some from "Purely Functional Data Structures") in pure functional
programming languages. Examples are written in Haskell;
- The Programming Languages: Application and Interpretation book by Shriram Krishnamurthi
is textbook for course "Programming languages". It reviews different aspects of design
and development of programming languages. All examples are in Scheme;
- The How to Design Programs: An Introduction to Programming and Computing book (it also
available online and distributed with PLT Scheme) is a textbook about programming in
general. In demonstrates different approaches to programs development (using Scheme
- The Concrete Abstractions. An Introduction to Computer Science Using Scheme book (also
freely available) is an introduction to core concepts of computer science &
- The Lambda-Calculus and Combinators: An Introduction books provides introduction to
theoretical foundations of lambda-calculus;
- The Lambda Calculus. Its Syntax and Semantics describes theoretical foundations of
lambda calculus in great details;
- Pattern Calculus: Computing with Functions and Structures tries to describes dependencies between pattern
calculus, lambda-calculus, programming languages, etc.
- Foundations for Programming Languages (Foundations of Computing) — this book discusses
type theory & implementation of programming languages, including functional one.
- Practical Foundations for Programming Languages by Robert Harper describes foundations
of programming languages, based on the type theory. This draft version of this book is
also freely available.
- The Programming Language Concepts (Undergraduate Topics in Computer Science) book uses
F# to demonstrate basic concepts of programming languages, and also describes some
problems of implementation, such as garbage collection, etc., including implementation
of small toy language.
More freely available books you can find at the site of Free Tech Books project.
Type Theory, Category Theory, etc.
Type theory plays central role in functional programming, especially for strongly typed
programming languages, like Haskell. Category theory also belongs to the theoretical
foundations of functional programming. There are several books dedicated to these topics:
Implementation of Functional Programming Languages
Some of aforementioned books provide some details of implementation of functional
programming languages. But there are also books, that are completely dedicated to this
- The Design Concepts in Programming Languages book is dedicated to theoretical &
practical aspects of development of programming languages;
- The The Implementation of Functional Programming Languages book, written by Simon
Peyton Jones in 1987, describes such topics, as lambda-calculus, types infer &
checking, pattern matching, etc., and how these things could be used to implement
functional programming languages;
- The Implementing functional languages: a tutorial book was written by Simon Peyton
Jones & David Lester in 1992, and shows how to implement simple functional programming
- Freely available Functional Programming and Parallel Graph Rewriting book describes
different models of functional programming languages, and uses Clean language as
- The Garbage Collection: Algorithms for Automatic Dynamic Memory Management is
completely dedicated to description of different strategies for garbage collection that
are often used in functional programming languages. The new edition was published in
2011th under title The Garbage Collection Handbook: The Art of Automatic Memory Management.
- The Modern Compiler Implementation in ML books describes how to implement compilers
(parsing, code generation, etc.) using the Standard ML;
- Compiling with Continuations shows how continuation-passing programming style could be
used for performing optimization & programs transformations. The book uses the
Standard ML as implementation language.
Overview Books About Different Languages
There are several books that describe different programming approaches & techniques, and
use different programming languages for this task. Usually they mention functional
programming languages. I want to mention following books that could provide good overview
of functional programming approach:
Functional Programming for Programmers in Other Languages
In the last years, several books were published, whose main topic is an introduction to
functional programming for developers in "traditional" languages, like Java, C#, etc.:
Specific Functional Programming Languages
In this section I collected most interesting (IMHO) books on specific functional
Relatively good introduction to specific functional programming languages you can find in
the Seven Languages in Seven Weeks book, published by Pragmatic Bookshelf. It describes
basics of programming in 7 languages (Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell),
including small examples. I think, that this book could be used to understand, will you
want to continue to learn particular language, or not.
I want to mention following Haskell-specific books:
- The Introduction to Functional Programming using Haskell by Richard Bird is a
functional programming textbook and it uses Haskell for examples. It describes base
concepts of functional programming and their application in Haskell. The book contains
many examples & exercises for self study.
- The Real World Haskell is a great book on Haskell language, because besides description
of the language itself, it also shows how to use Haskell in real-life: data parsing,
testing, database & GUI programming. You can also read it online for free.
- The Haskell Road To Logic, Maths And Programming shows how Haskell could be used in
mathematics & logic.
- The Programming in Haskell book, written by Graham Hutton, compactly describes Haskell,
and could be used as reference for people, who already know some Haskell, or other
functional language, such as, OCaml or Standard ML. This book is also used in the
video-lectures by Erik Meijer at Channel9.
- The Haskell: The Craft of Functional Programming book describes main concepts of
Haskell, including separate chapters on data types, type classes, etc.
- The Haskell School of Expression: Learning Functional Programming through Multimedia
shows practical aspects of work with Haskell, and describes relatively complex topics,
such as, interaction with external stuff, designing Haskell programs, etc.
- At May 2012, O'Reilly released the Developing Web Applications with Haskell and Yesod
book that describes how to develop web applications with Yesod framework. This book is
also available online.
Besides books, there are a lot of online materials. I only list most interesting here:
The Programming Erlang. Software for a Concurrent World book, is written by Joe Armstrong.
For a long time was the only available book on Erlang, as previous book
"Concurrent Programming in Erlang" was out of print, and it was hard to buy it. The
"Programming Erlang" describes Erlang using very simple language and provides information
about language itself & its base features. It also briefly describes more complex topics:
databases, using the OTP, etc. It's good introduction, but if you need to know more, it's
better to take one of the books, described below.
The O'Reilly, released Erlang Programming in 2009th. It describes both language, and
infrastructure-related stuff, including OTP, creation of GUI, test-driven development,
debugging and much more. This book is more detailed comparing with Armstrong's. Besides
this, O'Reilly published the Introducing Erlang book that could be used as a short
introduction into Erlang & base concepts of OTP.
Another book on Erlang, the Erlang and OTP in Action was released by Manning in 2010th, and
almost completely dedicated to use of OTP, and using Erlang with libraries in other
languages. This book assume, that reader already knows Erlang.
In the June 2012, the O'Reilly released small book
Building Web Applications with Erlang: Working with REST and Web Sockets on Yaws, that
describes how to use Yaws framework to develop web-based applications.
Success of the Learn You a Haskell for Great Good! lead to creation of similar project for
Erlang: Learn You Some Erlang for Great Good!, and you can read it online for free.
In the end of 2012th, the Springer company released unusual (for them) book:
Handbook of Neuroevolution Through Erlang, that describes how Erlang was used for building
of neural networks.
Besides these books, several Erlang-related books are planned for release:
- Erlang for .NET Developers — this book was announced at the end of 2011th, but there is
no information when it will be released.
- Addison-Wesley plans to release the Building Scalable Applications with Erlang book
that should provide an introduction into Erlang & OTP.
Caml & Objective Caml
There are several books about Objective Caml (OCaml) language:
- Most prominent between the is freely available
Developing Applications with Objective Caml, that describes not only the OCaml
language, but also provides many examples on how to develop software using this
- One more freely available book, the Introduction to Objective Caml was released not so
long time ago. This book contains very good description of language, and examples of
- The OCaml for Scientists book describes how to use OCaml for "scientific programming"
— data processing, mathematics, data visualization & performance optimization.
- One more existing book, Practical OCaml, describes OCaml language, but as I can see
from reviews, it's written not so good as expected by many readers.
- The freely available Think OCaml. How to Think Like a Computer Scientist provides an
introduction to computer science & programming, and it uses OCaml as base language.
- Another freely available book — Unix system programming in OCaml by Xavier Leroy and
Didier Rémy, explains how to use OCaml for Unix programming, including work with files,
sockets, processes, threads, etc.
The ZINC experiment: an economical implementation of the ML language is a technical
report, written by Xavier Leroy (author of OCaml) in 1990th, and it contains pretty
detailed description of ML-like language implementation. This report could be very
interesting for all who wants to know about internals of Caml & OCaml languages.
And in the fall of 2012th, O'Reilly plans to publish the Real World OCaml book that should
be a popular introduction into the OCaml language, like the "Real World Haskell" book was
There are several books about F# programming:
- Foundations of F# was published in 2007th and describes basics of language, plus shows
how to program in it using different approaches. It also shows how to use it in
practice for graphical user interface & work with databases. The new edition of this
book was released in 2009th under title Beginning F#.
- The Expert F# 3.0 book discusses more advanced topics, such as interoperation with code
in other languages, use of .Net libraries, work with databases, data parsing,
asynchronous programming, etc.
- F# for Scientists is similar to "OCaml for Scientists", but adapted for F#. It
contains information on how to use F# for "scientific programming" — data
visualization, data processing, etc.
- The Programming F# book was released by O'Reilly in 2009th, and it contains description
of actual F# (at that time) version — starting with basics language (including
functional & object-oriented programming approaches). After that, it describes use of
.Net libraries, metaprogramming, asynchronous & parallel programming. In appendix
there is an information about existing libraries for data processing and visualization.
In 2012th, O'Reilly released the 2nd edition of this book, that describes F# 3.0.
- Besides this, O'Reilly released one small book dedicated to F#:
Building Web, Cloud, and Mobile Solutions with F#.
- In the end of 2009th, Manning published the
Functional Programming for the Real World: With Examples in F# and C# book that
describes declarative approach to program development, and demonstrates it with
examples in F# and C#. This book could be interesting for developers, who're working
on the .Net platform, and who want to learn new programming approaches.
- The Flying Frog Consultancy also released the Visual F# 2010 for Technical Computing
book that describes version of F# that is provided together with MS Visual Studio 10.
- Wrox also released book on F# called Professional F# 2.0 — it contains description of
language together with many examples.
- There is ebook Friendly F# (Fun with game programming) that you can buy on Amazon.
This book introduces F# through game development.
- The free The F# Survival Guide book contains enough information about functional
programming and F# language.
- Another useful online resource is F# for fun and profit that contains many articles about F#.
The Manning plans to release another book on F#: F# Deep Dives, that describes how to use
F# to solve concrete tasks.
The Standard ML language is described by several books:
Besides these books, there also books that are dedicated to language's standard:
The Definition of Standard ML and The Standard ML Basis Library describe both language &
standard library in great details.
During the long history of Lisp development, many books were published about this language
(and its variants):
- The Practical Common Lisp (free online version) book is very good introduction to
programming in Common Lisp. Besides language's description, it provides many useful
examples on how to organize your programs, how to use macros & CLOS, use CL for web &
network programming, etc. Book shows how to build complete applications using Common
- Paradigms of Artificial Intelligence Programming: Case Studies in Common LISP —
classical book by Peter Norvig. It's main topic is artificial intelligence, and it
shows how to use Common Lisp to solve some of the tasks in this branch.
- The ANSI Common Lisp by Paul Graham, is for people, who're just starting to program in
Common Lisp. The book contains description of the language together with many example.
- On Lisp, also by Paul Graham, is dedicated to more complex tasks of programming in
Common Lisp: how to use & write macros, how to use them to create domain-specific
languages (DLS), etc.
- The Let Over Lambda book also dedicated to "more complex" topics of Common Lisp
programming — creation & use of macros, "correct" design of programs, etc.
- The Object-Oriented Programming in Common Lisp: A Programmer's Guide to CLOS and
The Art of Metaobject Protocol books provide detailed information on programming with
Common Lisp Object System (CLOS). The most part of the second book is dedicated to
description of Metaobject Protocol, that is grounding base of the CLOS, and I would
recommend it to all, who is interested in information about different approach to
object-oriented programming (OOP).
- The Common Lisp: The Language, 2ed (also available online) is a complete reference on
the Common Lisp language.
- Successful Lisp: How to Understand and Use Common Lisp is one more book for beginners
— it introduces Lisp in relatively easy way. There is also online version of this
- Lisp in Small Pieces is well-known book on Lisp. It describes implementations of Lisp
& Scheme, including programming with continuations, implementation of interpreter &
compiler for these languages, support for macros, and much more.
- The freely available Common Lisp: A Gentle Introduction to Symbolic Computation book is
pretty detailed introduction to programming in Common Lisp.
- The Starch Press released in 2010th one more book on Lisp —
Land of LISP: Learn to Program in LISP, One Game at a Time!. This book explains Lisp
is written in humorous manner, and using comics-like illustrations. More information
you can find on the site of this book.
Several years ago, the O'Reilly planned to release book on Common Lisp under title "Lisp
Outside the Box", and several chapters were available on project's site, but this project
was abandoned. As you can see from table of contents, it was planned to cover wide range
of topics — from Common Lisp's basics, to application development for web & desktop,
including how to use concrete libraries & development environments.
There are enough books about Scheme programming language. Following books describe, both
language & different aspects of its use. These books could be used as references, and
also as addition to "Structure and Interpretation of Computer Programs" and "How to Design
Programs", where Scheme is used for examples:
In the spring of 2013th, the Realm of Racket book should be released. This book will
describe Racket language (former PLT Scheme). This book should be similar to "Land of
Lisp" book, and provide information in similar manner.
Huge interest to Prolog in the 80-90th, lead to publishing a huge amount of books. Here
is only small part of available literature, that I think could be interesting for reader:
- Prolog Programming for Artificial Intelligence, 4ed is a classical book on Prolog in
application to artificial intelligence;
- The Logic Programming with Prolog is a very good book on Prolog for beginners. It
describes basics of logical programming with Prolog, together with examples of concrete
- Learn Prolog Now! is an introductory course to programming in Prolog. There is also
freely available online version of this book;
- Programming in Prolog: Using the ISO Standard — one more textbook on Prolog, that
demonstrates basic programming techniques for this language;
- Clause and Effect: Prolog Programming for the Working Programmer is a small
introduction to Prolog for developers who are using other programming languages;
- The The Craft of Prolog book is for people, who already learned Prolog, but want to
make their knowledge deeper;
- The Art of Prolog, Second Edition: Advanced Programming Techniques book is dedicated to
discussion of problems, that are usually not covered in introduction-level books: how
to build interpreters & compilers, program transformations, logical programming
- The Practice of Prolog — this book shows how to design and organize relatively big
Prolog programs for solving different problems;
- Prolog Programming in Depth is another book on "more complex" aspects of Prolog
programming: interaction with external systems, imperative programming in Prolog,
building of expert systems, etc.
There is also a number of freely available resources that have some relation to Prolog and
The Scala language became relatively popular, and already used in many companies, such as,
Twitter, LinkedIn, etc. Many books were already published for this language (I need to
mention, that books published before 2011th, can be incompatible with current versions of
- Programming in Scala: A Comprehensive Step-by-step Guide (published by Artima Inc.) was
a first book about this language. This book contains very detailed description of the
language, together with explanation of different programming approaches. Book also
covers practical aspects, such as, creation of graphical user interface, etc. The 2nd
edition of this book was released in 2011th, and 1st edition became freely available.
- Programming Scala: Scalability = Functional Programming + Objects (O'Reilly, 2009th)
provides detailed description of the language, and also covers some complex tasks, such
as, creation of domain specific languages, etc. It also provides information about
existing tooling for Scala. O'Reilly also made available free beta-version of this
- Programming Scala: Tackle Multi-Core Complexity on the Java Virtual Machine (Pragmatic
Programmers, 2009th) is a short (comparing to other books) introduction to programming
in Scala. But this book describes all main topics — interaction with JVM, concurrent
programming, pattern matching, etc. It's assumed that reader is familiar with Java.
- Beginning Scala (Apress, 2009) is similar to previous book — it's practical
introduction to Scala programming, showing main features using practical examples.
- The Steps in Scala: An Introduction to Object-Functional Programming book was released
in 2010th — this book provides an introduction to Scala using step-by-step approach,
showing language on many examples.
- The Scala for the Impatient was released in 2012th — it shows how to work with Scala
without much theoretical background — everything is illustrated by many examples,
starting with base constructs, and up to very complex things, such as, parsing,
advanced types, continuations, etc.
- The Scala in Depth book (Manning, 2012) should be a companion book for "Scala in
Action", and it's concentrated on the "not so easy" side of Scala programming — type
system, actors, more functional programming, etc.
- The Definitive Guide to Lift: A Scala-based Web Framework book (Apress, 2009) provides
detailed description of Lift — popular web-framework for Scala.
- In the 2011th, Manning also released book on Lift:
Lift in Action: The Simply Functional Web Framework for Scala. This book covers Lift
- x using many practical examples to make subject more understandable.
- The Actors in Scala (Artima, 2012) is completely dedicated to description of actors
model of communications that is used in Scala.
- Another useful book to understand Scala's approach to concurrent programming is the
Programming Concurrency on the JVM: Mastering Synchronization, STM, and Actors — it
covers different approaches & models of concurrent programming, including
implementations in Scala, Clojure and other languages.
- The Akka framework is often used with Scala, so following books could be useful:
Akka Concurrency, Akka Essentials, and Composable Futures with Akka 2.0.
- The Introduction to the Art of Programming Using Scala book was released in fall 2012.
There is also separate site where you can find more detailed information about this
- The Testing in Scala book describes how to use the ScalaTest and Spec2 testing
frameworks, including how to integrate them into SBT's builds.
There are also freely available materials about this language:
- Besides language's specification, on the language's site is also available documents "A
Brief Scala Tutorial" and "Scala by Example", that allows quickly get information about
this language. Another useful section on the site is Learning Scala that contains
links to books, lectures, and other study materials.
- Twitter, where Scala is actively used, published freely available several resources for
Scala learning: Scala School! From ∅ to Distributed Service and Effective Scala — both
are for people, who is just starting to study this language.
It's also planned to releases several books on Scala soon:
- Appress plans to publish the Pro Scala: Monadic Design Patterns for the Web book
(although, it still delaying).
- Manning plans to release several books in the near future (all these books are
available as part of Manning's early access program (MEAP)):
- Scala in Action should provide an introduction to Scala for beginners, covering
basics of the language, together with many practical examples.
- The Functional Programming in Scala doesn't describe language itself, but shows how
to use functional programming approach in Scala.
- Play for Scala book describes new web framework Play.
- Scalatra in Action describes the Scalatra web framework that is more simple comparing
with Lift or Play.
- The Atomic Scala should be an introduction into the Scala language.
Besides book & web-sites, there are several online courses for Scala, such as
http://www.scalacourses.com/ or Functional Programming Principles in Scala (that is taught
by Martin Odersky).
Clojure is relatively young Lisp-like programming language for Java Virtual Machine (JVM).
In contrast to other implementation, Clojure is separate language, not compatible neither
with Common Lisp, nor with Scheme. This allowed to implement many interesting things,
like immutable data, implicit parallel execution of code, very simple model of concurrent
programming, software transactional memory, etc., while keeping two-way interaction with
code in Java.
The first book on this language was released by Pragmatic Programmers in 2009 under title
Programming Clojure. This book provided pretty good introduction to language, describing
all basic features (for version 1.0, that was actual at the time of release). But you
still need to use site of the language as a reference for functions, and other things.
The 2nd edition of this book was released in 2012th, and it was updated to include
information about version 1.3, covering all major changes between versions.
The second book on Clojure was released in 2010 as Practical Clojure. The Definitive Guide
— it contains succinct description of language, including new functionality from version
1.2.0 — datatypes & protocols. But this book lacks description of infrastructure-related
things, like IDE, build tools, etc.
In 2011th, Manning published 2 books on Clojure: Clojure in Action and
The Joy of Clojure. Thinking the Clojure Way. First books is an introduction to language,
where basics of language is described together with many practical examples. While the
second book, is for people, who already has some Clojure experience and who want to get
more information about "Clojure programming style". More detailed review of this book you
can find in my blog. And the 2nd edition of "The Joy of Clojure" is currently in
O'Reilly also published book on Clojure — the Clojure Programming was written by
well-known Clojure developers. This book provides very good description of Clojure,
different libraries, shows how to use this language in practice, and also contains many
advice on how to write idiomatic Clojure code.
The Developer.Press also released small book called Clojure Made Simple that describes the
basics of language — data types, core functions, etc. But this book almost completely
lacks description of concurrent programming stuff.
The Packt Publishing also published a book on Clojure: the Clojure Data Analysis Cookbook
describes how Clojure could be used for data analysis, including use of Incanter project.
The ClojureScript language, that is developed in parallel with Clojure, allows you to
write web applications that are executed in browser. The O'Reilly released a small book
ClojureScript: Up and Running that describes basics of development with ClojureScript,
including information about existing libraries.
The No Starch Press should also release book on Clojure under title Meet Clojure.
In this section I tried to put only that books, that I can recommend to read to study
To study functional programming & Haskell, I can recommend the
Introduction to Functional Programming using Haskell book by Richard Bird. More
practical-oriented introductory books are Real World Haskell and
Learn You a Haskell for Great Good!: A Guide for Beginners.
Studying of Erlang it's better to start with either from Erlang Programming by O'Reilly,
or from Erlang and OTP in Action — both books provides enough information about language,
For Scala you can select between several books. If you want to start to use it
immediately, then you can choose Scala for the Impatient. But if you want to get more
deep knowledge of this language, then the best choice is
Programming in Scala: A Comprehensive Step-by-step Guide. And after them you can continue
with Scala in Depth and other books.
To learn Clojure, the most actual books are Clojure Programming (more detailed) and 2nd
edition of Programming Clojure — the both will provide you enough information about
language, together with examples. And after them, I would recommend you to read
The Joy of Clojure. Thinking the Clojure Way!
If you're interested in the Common Lisp, then you can start with Practical Common Lisp
that will provide enough information to start with language. The more complex things are
described in the On Lisp, The Art of Metaobject Protocol, Lisp in Small Pieces and
For ML family of languages exists enough books. For OCaml you can start with an
Introduction to Objective Caml, and use it together with language reference. After that
you can take Developing Applications with Objective Caml and/or other languages. For F#
it good idea to start with Expert F# 2.0 or Begining F#, and continue with
F# for Scientists.
For Prolog I would recommend to start with
Prolog Programming for Artificial Intelligence, 4ed , and then continue with books, listed
Last change: 05.04.2013 15:16