Functional Languages
Languages built on mathematical functions, immutability, and declarative expression. Rooted in lambda calculus (Church, 1936) and emphasizing composition over mutation.
Sub-topics
Created by John McCarthy at MIT in 1958. The second-oldest high-level language (after Fortran). Pioneered garbage collection, tree data structures, dynamic typing, and homoiconicity. Parent of Scheme, Common Lisp, Clojure, and Racket.
Created by Guy Steele and Gerald Sussman at MIT in 1975. A minimalist Lisp dialect emphasizing lexical scoping, tail-call optimization, and first-class continuations. Hugely influential in CS education (SICP) and language design.
Standardized in 1984 (ANSI 1994) to unify fragmented Lisp dialects. A multi-paradigm powerhouse with CLOS (object system), macros, conditions, and dynamic typing. Used in AI research, Grammarly, and ITA Software (now Google Flights).
Created by Rich Hickey in 2007. A modern Lisp on the JVM emphasizing immutability, persistent data structures, and concurrency via STM (Software Transactional Memory). Influenced by Lisp, Haskell, Erlang, and Java.
Originally PLT Scheme (1995), renamed Racket in 2010. A language-oriented programming language — designed for creating new languages. Built by Matthias Felleisen's team for CS education and PL research.
Meta Language, created by Robin Milner at Edinburgh in 1973. Introduced Hindley-Milner type inference, pattern matching, and algebraic data types. Parent of SML, OCaml, F#, and spiritual ancestor of Haskell and Rust's type systems.
Created by Xavier Leroy et al. at INRIA in 1996. Extends Caml (an ML dialect) with objects and a powerful module system. Compiles to efficient native code. Influenced Rust, F#, Scala, and Haskell. Used at Jane Street and Facebook.
Designed by committee in 1990 to consolidate lazy functional language research. Named after logician Haskell Curry. Features lazy evaluation, monads, type classes, and purity. Influenced Rust, Swift, Scala, Elm, PureScript, and many others.
Created by Don Syme at Microsoft Research in 2005. An ML-family language on .NET, strongly influenced by OCaml. Combines functional programming with OOP and .NET interop. Pioneered async workflows that influenced C# async/await.
Created by Evan Czaplicki in 2012 as his thesis. A purely functional language for web front-ends that compiles to JavaScript. Known for 'no runtime exceptions' guarantee. Influenced by Haskell, OCaml, and F#. Pioneered The Elm Architecture (TEA), later adopted by Redux.
Created by Joe Armstrong at Ericsson in 1986 for telecom switches. Designed for massive concurrency, fault tolerance, and hot code swapping via the BEAM VM. Powers WhatsApp, RabbitMQ, and telecom infrastructure worldwide.
Created by Jose Valim in 2011. Runs on the Erlang BEAM VM with Ruby-inspired syntax and modern metaprogramming. Combines Erlang's concurrency model with developer-friendly tooling (Mix, Hex, Phoenix framework).
Created by Martin Odersky at EPFL in 2004. Fuses OOP and functional programming on the JVM. Features pattern matching, type inference, implicits, and actors (Akka). Used at Twitter, LinkedIn, and the Spark ecosystem.
Created by Phil Freeman in 2013. A strongly typed, purely functional language that compiles to JavaScript. Heavily inspired by Haskell but designed specifically for the JS ecosystem. Features row polymorphism and extensible records.
Created by Louis Pilfold in 2016 (v1.0 in 2024). A friendly, type-safe language for the Erlang BEAM VM. Combines Erlang's concurrency with ML-family type safety. Can also compile to JavaScript. Growing rapidly in the web services space.
Developed at INRIA starting in 1989, first released in 1991. An interactive theorem prover and dependently typed functional language. Used to formally verify mathematical proofs and critical software (CompCert C compiler). Renamed to Rocq in 2024.
Created by Edwin Brady, first released in 2007 (Idris 2 in 2020). A general-purpose language with dependent types — like Haskell but types can depend on values. Bridges the gap between theorem provers and practical programming.
Standardized in 1990 (revised 1997). The first formally defined programming language with a complete rigorous semantics. Direct descendant of ML, featuring modules with functors. Influenced OCaml, Haskell, and Rust.
Created by David Turner in 1985. A lazy, purely functional language that directly precipitated Haskell's creation. Miranda was proprietary, so the Haskell committee designed an open alternative incorporating Miranda's key innovations.