This post contains a collection of resources for learning about functional programming. These resources cover a range of levels from beginner-friendly introductions right through to more advanced concepts.

Articles, Papers & Blog Posts

Why Functional Programming Matters ("WhyFP")

Considered to be “the” paper describing the importance of functional programming.

Why Why Functional Programming Matters Matters

A short reflection of Why Functional Programming Matters, with a particular focus on language design.

How Functional Programming Mattered

This paper attempts to asses the impact that functional programming has had in the real world, more than 20 years after Why Functional Programming Matters was written.

What is Reactive Programming?

A very concise explanation of what (functional) reactive programming is.

Functors, Applicatives, And Monads In Pictures

A great illustrated introduction to functors, applicatives and monads.

The algebra (and calculus!) of algebraic data types

An intermediate-level article which explores the connection between algebraic data types and elemendary algebra. A basic understanding of Haskell's data type declaration syntax is assumed.

Books

Professor Frisby's Mostly Adequate Guide to Functional Programming

A general look at the functional paradigm, using JavaScript as the example language. This book is available on GitHub (under the Attribution-ShareAlike license).

Structure and Interpretation of Computer Programs

Available for free on MIT Press, this classic textbook covers the foundations of modern programming. Scheme is the main language used, so most of the book is written from a functional perspective.

Videos

The Essence of FRP

Conal Elliott talks about how the definition of FPR has recently become more and more misunderstood. He explains the original definition of FRP and the benefits it is intended to provide.

Lenses: compositional data access and manipulation

An introduction to lens, and how lenses can help simplify working with complex data types.

Lenses, Folds, and Traversals

A talk centred around the lens package, covering how to compose lenses using Haskell's regular composition operator (.), and illustrating a scheme for performing lens-based folds and traversals.

Railway Oriented Programming

Scott Wlaschin explains a functional approach to error handling (F#).

Functional Programming Design Patterns

Another talk by Scott Wlaschin where he explains some common functional design patterns.

Other Collections

Functional Programming in Haskell and OCaml by Examples

A collection of tutorials which aim to teach functional programming concepts and patterns by example.

How to learn Haskell

A huge collection of resources for learning Haskell. The Specific topics for Haskell users page is especially useful for understanding specific concepts.