This is a regularly updated page with interesting links about the world of functional programming. It is presented as a story: we’ve given context on how these various resources relate to FP, and have suggested an order to consume them in (a suggestion you are more than welcome to disregard!). The links provide a history on how FP has become dramatically more popular in recent times, and how decades old technology is becoming increasingly relevant in modern projects.

We start with thinking about how we can do better than the typical tools you might come across today. In one of his most famous posts, developer and evangelist Steve Yegge talks about execution in the kingdom of nouns - a long critique on Java’s way of doing OOP and its insistence on very rigid architectures.

Next Rich Hickey, creator of Clojure (a modren Lisp running on the JVM) speaks about his decades long experience with OOP and describes fundamental problems with the OOP approach, along with how FP can provide better solutions.

Are We There Yet?: a treatment of fundamental principles on OOP, how they hold up to modern development challenges and how FP principles can help.

Simple Made Easy: why simple is better than easy, and how FP can cater for simplicity.

The Value of Values: how FP is about value-oriented programming, and how dealing with values is better than what imperative languages can offer.

Now Simon Peyton Jones (creator of Haskell and a past UCL lecturer) talks about the future of programming languages, arguing that safety and being useful(!) is where we’re headed.

Tools to play with

Racket. Modern implementation of Scheme. Will be using this with the SICP book. Large number of libraries, has been used to implement other languages.

http://racket-lang.org/

Clojure. A very modern Lisp. Runs on the JVM, has recently gained lots of popularity. Because of Java interop, it immediately has a vast number of libraries it can call upon. Lots of Clojure specific libraries too, core.typed being a particularly interesting one that shows the power of the language (adding a type system to the language can be done with a library!). Has a variant called Clojurescript that is the same language but compiles to JS.

http://clojure.org/

Scala. Another JVM language that has both OO and functional constructs. Rapidly gaining popularity in industry.

http://www.scala-lang.org/

OCaml: functional programming language most notably used by Jane Street, Facebook and other companies listed here (http://ocaml.org/learn/companies.html). Comes from the ML family of languages.

http://ocaml.org

Standard ML. Modern implementation of ML, a language that formed many of the ideas in the functional programming world. Has an impressive compiler that produces very fast binaries (http://mlton.org/)

https://www.cl.cam.ac.uk/~lp15/MLbook/

Haskell. Probably one of the most famous and widely taught functional programming languages, initially seen as an academic tool, now being used for a wide range of projects. Has a mature set of external libraries.

http://www.haskell.org/haskellwiki/Haskell