Unfortunately, I don't have time anymore to update this list, the last additions were about 2 years ago :-(

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 (Updates to this page usually happening not so often — every 2-3 months).

Descriptions for the books are relatively short — just to give an overview of the book's topics, otherwise this article will become too big. For some of books there are more detailed reviews published in my blog. You can also follow my reviews on Goodreads.

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.:

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 topic:

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.:

The Functional programming for Java developers book (by the author of "Programming Scala") demonstrates main approaches & techniques of functional programming, but is using Java for examples. The main goal of this book — make Java developers interested in new approaches & benefits of functional programming;

The Wiley, published the Functional Programming in C#: Classic Programming Techniques for Modern Projects book, that shows how to use functional programming techniques in C#.

Functional Programming for the Object-Oriented Programmer is an introduction into functional programming for people, who has an experience with object-oriented programming. The book uses Clojure to demonstrate described concepts.

Functional C shows how the programs in C programming language could be written in functional programming style.

Specific Functional Programming Languages

In this section I collected most interesting (IMHO) books on specific functional programming languages.

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.

Haskell

I want to mention following Haskell-specific books:

Besides books, there are a lot of online materials. I only list most interesting here:

Erlang

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. In the fall 2013 the publisher plans to release the 2nd edition of this book.

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. There is also companion for this book called Études for Erlang that contains an exercises not included into first book.

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.

Pragmatic Bookshelf plans to release the Programming Elixir book that describes the Elixir programming language that was designed for Erlang VM.

O'Reilly also plans to release book about the Elixir language that is called Introducing Elixir. Getting Started in Functional Programming.

Caml & Objective Caml

There are several books about Objective Caml (OCaml) language:

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 2013th, 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 for Haskell. The text of book is also available on separate site.

There are several books about F# programming:

The Manning plans to release another book on F#: F# Deep Dives, that describes how to use F# to solve concrete tasks.

Standard ML

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.

Lisp

During the long history of Lisp development, many books were published about this language (and its variants):

Vsevolod Dyomkin for a long time interviewed many well-known Commom Lisp developers, and now these interviews are available as free ebook: Lisp Hackers. Interviews with 100x More Productive Programmers.

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.

Scheme

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 was released. This book describes the Racket language (former PLT Scheme). It's similar to "Land of Lisp" book (they have the same author), and provide information in similar manner.

Prolog

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:

There is also a number of freely available resources that have some relation to Prolog and logic programming:

Scala

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 the language):

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:

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

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 development.

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.

O'Reilly also plans to publish one more book on Clojure - Clojure Cookbook, and everybody can submit recipes that will be included into this book.

Recommendations

In this section I tried to put only that books, that I can recommend to read to study specific languages.

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, and OTP.

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 other books.

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 above.