The table shows a comparison of functional programming languages which compares various features and designs of different functional programming languages.
| Name | Pure | Lazy evaluation | Typing | Abstract data types | Algebraic data types | Data is immutable | Type classes | Garbage collection | First appeared |
|---|---|---|---|---|---|---|---|---|---|
| Common Lisp | No | Simulated with thunks | Dynamic | Yes | Extension | No | ? | Yes | 1984 |
| Scheme | No | Yes | Dynamic | Yes | Simulated with thunks | No | No | Yes | 1975 |
| Racket | No | Default in Lazy Racket | Strong, Dynamic, statically typed with gradual typing in Typed Racket | Yes | Yes, with Algebraic Racket | Partial | No | Yes | 1995 |
| Clojure | No | Yes | Dynamic | Yes | Yes | Yes | No | Yes | 2007 |
| Standard ML | No | No | Static | Yes | Yes | Yes | No | Yes | 1983 |
| OCaml | No | Yes | Static | Yes | Yes | Yes | Simulated with parametric modules | Yes | 1996 |
| F# | No | Yes | Static | Yes | Yes | Yes | No | Yes | 2005 |
| Haskell | Yes | Default | Static | Yes | Yes | Yes | Yes | Yes | 1990 |
| Scala | No | Yes | Static | Yes | Yes | Yes | Yes | Yes | 2004 |
| JavaScript | No | Extension | Dynamic | Extension | Extension | Partial | ? | Yes | 1995 |
| Clean | Yes | Yes, with optional strictness annotations | Static with uniqueness/optionally dynamic | Yes | Yes | Yes, except for unique types | Yes | Yes | 1987 |
| Miranda | Yes | Default | Static | Yes | Yes | Yes | No | Yes | 1986 |
| SASL | Yes | Yes | Dynamic | Yes | Yes | Yes | No | Yes | 1972 |
| Elixir | No | Stream module | Dynamic | Yes | No | Yes | ? | Yes | 2012 |
| Erlang | No | No | Dynamic | Yes | No | Yes | ? | Yes | 1986 |
| Elm | Yes | No | Static | ? | Yes | Yes | No | Yes | 2012 |
| Futhark | Yes | No | Static | Yes | Yes | Yes | No | Yes | 2014 |
| Python | No | Simulated with generators | Dynamic | Yes | No | Partial | ? | Yes | 1991 |
| Idris | Yes | Yes | Static | Yes | Yes | Yes | Yes | Yes | 2007 |
| Nix | Yes | Yes | Dynamic | No | Yes | Yes | No | Yes | 2003 |
| Wolfram Language | No | No | Static | Yes | Yes | Yes | No | Yes | 1988 |
| Kotlin | No | Lazy delegation and Sequence | Static | Yes | No | Yes | No | Yes | 2011 |
| Swift | No | No | Static | Yes | Yes | Yes | No | Swift uses Automatic Reference Counting, which differs from tracing garbage collection but is designed to provide similar benefits with better performance. | 2014 |
| Julia | No | No | Dynamic | Yes | No | Partial | ? | Yes | 2012 |
| PureScript | Yes | No | Static | Yes | Yes | Yes | Yes | Yes | 2013 |
| Rust | No | Lazy iterators and external libraries | Static | Yes | Yes | Yes | Yes, through traits | No | 2010 |
| Bosque | No | No | Static | Yes | Yes | Yes | ? | Yes | 2019 |
| D | Optional | Optional | Static | ? | Yes | Yes | No | Yes | 2001 |
| Gleam | No | Experimental external libraries | Static | Yes | Yes | Yes | No | Yes | 2019 |
{{cite web}}: CS1 maint: multiple names: authors list (link)