April 02, 2014
Recommended Reading
Here are some books that I have found helpful in improving my understanding of functional programming. I have approached and been defeated by most of them several times, but each time I get a bit farther and I have some confidence that I can make it through them all eventually. Some are still sitting here on my desk. I’m not an expert but these books have all been enlightening.
If you have suggestions please send them my way. I would be delighted to find more books that are good enough to add to this list.
Theory
- Naïve Set Theory by Paul Halmos. A very readable and enjoyable introduction to set theory.
- A Book of Abstract Algebra by Charles Pinter. A real gem. Wonderful intro to abstract algebra (groups, rings, fields, Galois theory) written for the interested amateur.
- Conceptual Mathematics by F. William Lawvere and Stephen Schanuel. An unusual introduction to category theory for the absolute beginner, with numerous examples and very good discussion.
- Category Theory by Steve Awodey. A significantly more compact and faster-paced book than Lawvere above, also with many examples and excellent discussions.
- Lambda Calculus and Combinators by J. Roger Hindley. Really nice intro to λ-calculus and SKI-style combinators and their relationships, with simple typing and normalization.
- Types and Programming Languages by Benjamin Pierce. Duh. This is the the introductory book on the subject, known lovingly as TAPL. Challenging and wonderful.
Practice
- Purely Functional Data Structures by Chris Okasaki. This book is a real eye-opener if you don’t quite get how immutable data structures can be fast and awesome. His thesis covers similar material in a denser fashion.
- Implementing Functional Languages: A Tutorial by Simon Peyton Jones and David Lester. This book is out of print but the link goes to a PDF. A really nice hands-on tutorial on implementing a compiler and runtime for Haskell-like language.
- Functional Programming in Scala by Paul Chiusano and Rúnar Bjarnason. This is a great book on modern statically-typed FP, using Scala as the teaching language. Essential reading if you want to write principled software in Scala.
- Programming Languages: Application and Interpretation by Shriram Krishnamurthi. A good survey of language design via implementing interpreters. It has changed quite a lot from the first edition but I assume it’s still good. Shriram’s course is also available online if you google around.