Comparison of functional programming languages: Difference between revisions
From HandWiki
imported>MedAI add |
Importwiki (talk | contribs) fixing |
||
| Line 7: | Line 7: | ||
! Name !! [[Purely functional programming|Pure]] !! [[Lazy evaluation]] !! [[Type system|Typing]] !! [[Abstract data type]]s !! [[Algebraic data type]]s !! [[Immutable object|Data is immutable]] !! [[Type class]]es !! Garbage collection || First appeared | ! Name !! [[Purely functional programming|Pure]] !! [[Lazy evaluation]] !! [[Type system|Typing]] !! [[Abstract data type]]s !! [[Algebraic data type]]s !! [[Immutable object|Data is immutable]] !! [[Type class]]es !! Garbage collection || First appeared | ||
|- | |- | ||
| [[Common Lisp]] || {{No}}<ref name=math-cs.gordon.edu>{{cite web|title=LISP Introduction|url=http://www.math-cs.gordon.edu/courses/cps323/LISP/lisp.html|access-date=26 November 2013}}</ref> || {{Partial | | [[Common Lisp]] || {{No}}<ref name=math-cs.gordon.edu>{{cite web|title=LISP Introduction|url=http://www.math-cs.gordon.edu/courses/cps323/LISP/lisp.html|access-date=26 November 2013}}</ref> || {{Partial|Simulated with [[Thunk|thunk]]s<ref name=common-lisp>{{cite web|last=Antoniotti|first=Marco|title=CLAZY: Lazy Calling in Common Lisp|url=http://common-lisp.net/project/clazy/|access-date=26 November 2013}}</ref>}} || style="background:#FC6; text-align:center"|Dynamic<ref>{{cite journal|last=Tratt|first=Laurence|title=Dynamically Typed Languages|journal=Advances in Computers|date=July 2009|volume=77|pages=149–184|url=http://tratt.net/laurie/research/pubs/html/tratt__dynamically_typed_languages/|access-date=26 November 2013|doi=10.1016/s0065-2458(09)01205-4|url-access=subscription}}</ref>|| {{Yes}}<ref name=cs.sfu.ca>{{cite web|title=LISP Tutorial Lecture 3: Data Abstraction|url=http://www.cs.sfu.ca/CourseCentral/310/pwfong/Lisp/3/tutorial3.html}}</ref> || {{Partial|Extension}}<ref>{{cite web|title=Algebraic data types in Common Lisp|website=[[GitHub]] |url=https://github.com/stylewarning/cl-algebraic-data-type|access-date=11 May 2020}}</ref> || {{No}}<ref>{{cite web|title=Mutable Data Structures|url=http://caml.inria.fr/pub/docs/fpcl/fpcl-07.pdf|access-date=28 November 2013}}</ref> || {{Dunno}} || {{Yes}} || 1984 | ||
|- | |- | ||
| [[Scheme (programming language)|Scheme]] || {{No}}<ref name=caml.inria.fr>{{cite web|title=Similar Functional Languages|url=http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora202.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{cite web|title=(Scheme) 17. Lazy Evaluation|url=http://www.shido.info/lisp/scheme_lazy_e.html|access-date=30 April 2020}}</ref> || style="background:#FC6; text-align:center"|Dynamic<ref name="caml.inria.fr" /> || {{Yes}}<ref>{{cite web|title=Records - Revised<sup>6</sup> Report on the Algorithmic Language Scheme|url=http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib.html|access-date=11 May 2020}}</ref> || {{Partial}} | | [[Scheme (programming language)|Scheme]] || {{No}}<ref name=caml.inria.fr>{{cite web|title=Similar Functional Languages|url=http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora202.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{cite web|title=(Scheme) 17. Lazy Evaluation|url=http://www.shido.info/lisp/scheme_lazy_e.html|access-date=30 April 2020}}</ref> || style="background:#FC6; text-align:center"|Dynamic<ref name="caml.inria.fr" /> || {{Yes}}<ref>{{cite web|title=Records - Revised<sup>6</sup> Report on the Algorithmic Language Scheme|url=http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib.html|access-date=11 May 2020}}</ref> || {{Partial|Simulated with thunks}}<ref>{{cite web|title=Algebraic Data Types in Scheme|url=https://pavpanchekha.com/blog/adtscm.html|access-date=11 May 2020}}</ref> || {{No}}<ref>{{cite web|title=Programs with State|url=http://www.cs.uni.edu/~wallingf/teaching/cs3540/sessions/session26.html|access-date=29 November 2013}}</ref>|| {{No}} || {{Yes}} || 1975 | ||
|- | |- | ||
| [[Racket (programming language)|Racket]] || {{No}} || {{ | | [[Racket (programming language)|Racket]] || {{No}} || {{Yes2}}Default in Lazy Racket<ref name="lazy racket">{{cite web|url=https://docs.racket-lang.org/lazy/index.html|title=Lazy Racket|access-date=8 February 2020|first=Eli|last=Barzilay}}</ref> || style="background:#99F; text-align:center"|[[Strong and weak typing|Strong]], Dynamic, statically typed with [[Gradual typing|gradual typing]] in Typed Racket<ref name="typed racket">{{cite web|url=https://docs.racket-lang.org/ts-reference/index.html|title=Typed Racket|access-date=8 February 2020|first1=Sam|last1=Tobin-Hochstadt|first2=Vincent|last2=St-Amour|first3=Eric|last3=Dobson|first4=Asumu|last4=Takikawa}}</ref> || {{Yes}}<ref name="racket struct">{{cite web|url=https://docs.racket-lang.org/guide/define-struct.html|title=The Racket Guide: Programmer-Defined Datatypes|access-date=8 February 2020}}</ref> || {{Yes2}}Yes, with Algebraic Racket<ref name="algebraic racket">{{Cite web|url=https://docs.racket-lang.org/algebraic/index.html|title=Algebraic Racket|access-date=8 February 2020|first=Eric|last=Griffis}}</ref> || {{Partial}}<ref name="racket immutability">{{Cite web|url=https://beautifulracket.com/explainer/data-structures.html|title=Beautiful Racket: Data Structures|access-date=8 February 2020|first=Matthew|last=Buttrick}}</ref> || {{No}} || {{Yes}} || 1995 | ||
|- | |- | ||
| [[Clojure]] || {{No}}<ref>{{cite web|title=Clojure Functional Programing|url=http://clojure.org/functional_programming}}</ref> || {{Yes}}<ref>{{cite web|title=Clojure - lazy|url=http://clojure.org/lazy|access-date=27 November 2013}}</ref> || style="background:#FC6; text-align:center"|Dynamic<ref>{{cite web|title=Exploring clojure: dynamic typing|date=7 December 2012 |url=http://tgoossens.wordpress.com/2012/12/07/dynamically-exploring-clojure/|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{cite web|last=Engelberg|first=Mark|title=Thoughts On Programming|date=21 April 2009 |url=http://programming-puzzler.blogspot.com/2009/04/adts-in-clojure.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref name="clojure-contrib">{{cite web|title=clojure-contrib, typing example|url=https://code.google.com/p/clojure-contrib/source/browse/trunk/src/clojure/contrib/types/examples.clj?spec=svn596&r=596|access-date=26 November 2013}}</ref> || {{Yes}}<ref name=clojure.org>{{cite web|title=clojure: functional programming overview|url=http://clojure.org/functional_programming|access-date=26 November 2013}}</ref> || {{ | | [[Clojure]] || {{No}}<ref>{{cite web|title=Clojure Functional Programing|url=http://clojure.org/functional_programming}}</ref> || {{Yes}}<ref>{{cite web|title=Clojure - lazy|url=http://clojure.org/lazy|access-date=27 November 2013}}</ref> || style="background:#FC6; text-align:center"|Dynamic<ref>{{cite web|title=Exploring clojure: dynamic typing|date=7 December 2012 |url=http://tgoossens.wordpress.com/2012/12/07/dynamically-exploring-clojure/|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{cite web|last=Engelberg|first=Mark|title=Thoughts On Programming|date=21 April 2009 |url=http://programming-puzzler.blogspot.com/2009/04/adts-in-clojure.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref name="clojure-contrib">{{cite web|title=clojure-contrib, typing example|url=https://code.google.com/p/clojure-contrib/source/browse/trunk/src/clojure/contrib/types/examples.clj?spec=svn596&r=596|access-date=26 November 2013}}</ref> || {{Yes}}<ref name=clojure.org>{{cite web|title=clojure: functional programming overview|url=http://clojure.org/functional_programming|access-date=26 November 2013}}</ref> || {{No}} || {{Yes}} || 2007 | ||
|- | |- | ||
| [[Standard ML]] || {{No}}<ref name=cl.cam.ac.uk>{{cite web|title=Introduction to Functional Programming|url=http://www.cl.cam.ac.uk/~jrh13/slides/funprog-jrh/l8.pdf|access-date=26 November 2013}}</ref> || {{No}}<ref>{{cite web|title=Lazy and Eager Evaluation|url=http://homepages.inf.ed.ac.uk/dts/fps/lecture-notes/lazy.pdf|access-date=26 November 2013}}</ref><ref>{{cite web|last=Harper, MacQueen, Milner|title=Standard ML|url=http://www.lfcs.inf.ed.ac.uk/reports/86/ECS-LFCS-86-2/ECS-LFCS-86-2.pdf|work=Section 3.6}}</ref> || style="background:#8CF; text-align:center"|Static<ref>Wikibooks:Standard ML Programming/Types</ref> || {{Yes}} || {{Yes}}|| {{Yes}}<ref name="courses">{{cite web|title=Mutable and optional data|url=http://courses.cs.washington.edu/courses/cse341/04wi/lectures/08-ml-refs.html|access-date=28 November 2013}}</ref> || {{No}} || {{Yes}} || 1983 | | [[Standard ML]] || {{No}}<ref name=cl.cam.ac.uk>{{cite web|title=Introduction to Functional Programming|url=http://www.cl.cam.ac.uk/~jrh13/slides/funprog-jrh/l8.pdf|access-date=26 November 2013}}</ref> || {{No}}<ref>{{cite web|title=Lazy and Eager Evaluation|url=http://homepages.inf.ed.ac.uk/dts/fps/lecture-notes/lazy.pdf|access-date=26 November 2013}}</ref><ref>{{cite web|last=Harper, MacQueen, Milner|title=Standard ML|url=http://www.lfcs.inf.ed.ac.uk/reports/86/ECS-LFCS-86-2/ECS-LFCS-86-2.pdf|work=Section 3.6}}</ref> || style="background:#8CF; text-align:center"|Static<ref>Wikibooks:Standard ML Programming/Types</ref> || {{Yes}} || {{Yes}}|| {{Yes}}<ref name="courses">{{cite web|title=Mutable and optional data|url=http://courses.cs.washington.edu/courses/cse341/04wi/lectures/08-ml-refs.html|access-date=28 November 2013}}</ref> || {{No}} || {{Yes}} || 1983 | ||
|- | |- | ||
| [[OCaml]] || {{No}}<ref name=ocaml-functional>{{cite web|title=Functional Programming – OCaml|url=http://ocaml.org/learn/tutorials/functional_programming.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref name=ocaml-functional /> || style="background:#8CF; text-align:center"|Static<ref>{{cite web|last=Hickey|first=Jason|title=Introduction to Objective Caml|url=http://files.metaprl.org/doc/ocaml-book.pdf|work=Section 2.4|publisher=Cambridge University Press|access-date=26 November 2013|url-status=dead|archive-url=https://web.archive.org/web/20131002091023/http://files.metaprl.org/doc/ocaml-book.pdf|archive-date=2 October 2013}}</ref> || {{Yes}}<ref>{{cite web|title=Type and exception definitions|url=http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual016.html}}</ref> || {{Yes}}<ref>{{cite web|url=http://ocaml.org/learn/description.html#DataTypes| title=Learn OCaml - Data Types}}</ref> || {{Yes}}<ref>{{cite web|url=http://ocaml.org/learn/description.html#Imperativefeatures | title=Learn OCaml - Imperative Features}}</ref> || {{Partial | | [[OCaml]] || {{No}}<ref name=ocaml-functional>{{cite web|title=Functional Programming – OCaml|url=http://ocaml.org/learn/tutorials/functional_programming.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref name=ocaml-functional /> || style="background:#8CF; text-align:center"|Static<ref>{{cite web|last=Hickey|first=Jason|title=Introduction to Objective Caml|url=http://files.metaprl.org/doc/ocaml-book.pdf|work=Section 2.4|publisher=Cambridge University Press|access-date=26 November 2013|url-status=dead|archive-url=https://web.archive.org/web/20131002091023/http://files.metaprl.org/doc/ocaml-book.pdf|archive-date=2 October 2013}}</ref> || {{Yes}}<ref>{{cite web|title=Type and exception definitions|url=http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual016.html}}</ref> || {{Yes}}<ref>{{cite web|url=http://ocaml.org/learn/description.html#DataTypes| title=Learn OCaml - Data Types}}</ref> || {{Yes}}<ref>{{cite web|url=http://ocaml.org/learn/description.html#Imperativefeatures | title=Learn OCaml - Imperative Features}}</ref> || {{Partial|Simulated with parametric modules}}<ref>{{cite web|title=Implementing Type-Classes as OCaml Modules|url=https://accu.org/index.php/journals/2445|access-date=11 May 2020}}</ref> || {{Yes}} || 1996 | ||
|- | |- | ||
| [[F Sharp (programming language)|F#]] || {{No}}<ref>{{cite web | url=http://fsharpforfunandprofit.com/learning-fsharp/| access-date=6 December 2013 | title=Learning F#}}</ref>|| {{Yes}}<ref name="msdn">{{cite web|title=Lazy Computations (F#)|url=http://msdn.microsoft.com/en-us/library/vstudio/dd233247.aspx|publisher=Microsoft Developer Network|access-date=26 November 2013}}</ref> || style="background:#8CF; text-align:center"|Static<ref>{{cite web|title=About F#|url=http://fsharp.org/about/index.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{cite web|title=Structures - F#|url=https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/structures|access-date=11 May 2020}}</ref> || {{Yes}}<ref>{{cite web|title=Discriminated Unions|url=https://msdn.microsoft.com/en-us/library/dd233226.aspx}}</ref> || {{Yes}}<ref name=f-sharp-lang-spec>{{cite web|title=The F# 3.0 Language Specification: 1.1.2 Making Data Simple|url=http://fsharp.org/about/files/spec.pdf|access-date=26 November 2013}}</ref> || {{No}} || {{Yes}} || 2005 | | [[F Sharp (programming language)|F#]] || {{No}}<ref>{{cite web | url=http://fsharpforfunandprofit.com/learning-fsharp/| access-date=6 December 2013 | title=Learning F#}}</ref>|| {{Yes}}<ref name="msdn">{{cite web|title=Lazy Computations (F#)|url=http://msdn.microsoft.com/en-us/library/vstudio/dd233247.aspx|publisher=Microsoft Developer Network|access-date=26 November 2013}}</ref> || style="background:#8CF; text-align:center"|Static<ref>{{cite web|title=About F#|url=http://fsharp.org/about/index.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{cite web|title=Structures - F#|url=https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/structures|access-date=11 May 2020}}</ref> || {{Yes}}<ref>{{cite web|title=Discriminated Unions|date=15 September 2021 |url=https://msdn.microsoft.com/en-us/library/dd233226.aspx}}</ref> || {{Yes}}<ref name=f-sharp-lang-spec>{{cite web|title=The F# 3.0 Language Specification: 1.1.2 Making Data Simple|url=http://fsharp.org/about/files/spec.pdf|access-date=26 November 2013}}</ref> || {{No}} || {{Yes}} || 2005 | ||
|- | |- | ||
| [[Haskell]] || {{Yes}}<ref name=haskell.org>{{cite web|title=Haskell Wiki|url=http://www.haskell.org|access-date=26 November 2013}}</ref> || {{Yes2}}Default<ref name=haskell.org.wiki.lazyEval>{{cite web|title=Haskell Wiki Lazy Evaluation|url=http://www.haskell.org/haskellwiki/Lazy_evaluation|access-date=26 November 2013}}</ref> || style="background:#8CF; text-align:center"|Static<ref name="haskell.org.wiki.typing">{{cite web|title=Haskell Typing|url=http://www.haskell.org/haskellwiki/Typing|publisher=HaskellWiki|access-date=26 November 2013}}</ref> || {{Yes}}<ref name="haskell.org" /> || {{Yes}}<ref name=haskell.org.wiki.abstractDataType>{{cite web|title=Haskell Wiki Abstract Data Type|url=http://www.haskell.org/haskellwiki/Abstract_data_type|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{cite web|url=http://www.haskell.org/haskellwiki/Functional_programming#Immutable_data|title=Haskell Wiki|access-date=27 November 2013}}</ref> || {{Yes}}<ref>{{cite web|url=http://www.haskell.org/tutorial/classes.html|title=Type Classes and Overloading}}</ref> || {{Yes}} || 1990 | | [[Haskell]] || {{Yes}}<ref name=haskell.org>{{cite web|title=Haskell Wiki|url=http://www.haskell.org|access-date=26 November 2013}}</ref> || {{Yes2}}Default<ref name=haskell.org.wiki.lazyEval>{{cite web|title=Haskell Wiki Lazy Evaluation|url=http://www.haskell.org/haskellwiki/Lazy_evaluation|access-date=26 November 2013}}</ref> || style="background:#8CF; text-align:center"|Static<ref name="haskell.org.wiki.typing">{{cite web|title=Haskell Typing|url=http://www.haskell.org/haskellwiki/Typing|publisher=HaskellWiki|access-date=26 November 2013}}</ref> || {{Yes}}<ref name="haskell.org" /> || {{Yes}}<ref name=haskell.org.wiki.abstractDataType>{{cite web|title=Haskell Wiki Abstract Data Type|url=http://www.haskell.org/haskellwiki/Abstract_data_type|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{cite web|url=http://www.haskell.org/haskellwiki/Functional_programming#Immutable_data|title=Haskell Wiki|access-date=27 November 2013}}</ref> || {{Yes}}<ref>{{cite web|url=http://www.haskell.org/tutorial/classes.html|title=Type Classes and Overloading}}</ref> || {{Yes}} || 1990 | ||
| Line 25: | Line 25: | ||
| [[Scala (programming language)|Scala]] || {{No}}<ref name=scala-lang.org.archives.files.ScalaOverview>{{cite web|title=Scala Overview|url=http://www.scala-lang.org/old/sites/default/files/linuxsoft_archives/docu/files/ScalaOverview.pdf|access-date=26 November 2013}}</ref> || {{Yes}}<ref name=scala-lang.org.files.ScalaExample>{{cite web|title=Scala by Example|url=http://www.scala-lang.org/docu/files/ScalaByExample.pdf|access-date=26 November 2013}}</ref> || style="background:#8CF; text-align:center"|Static<ref name="scala-lang.org.archives.files.ScalaOverview" /> || {{Yes}}<ref name="scala-lang.org/files/archive">{{cite web|title=Scala Reference|url=http://www.scala-lang.org/files/archive/nightly/pdfs/ScalaReference.pdf|access-date=26 November 2013}}</ref> || {{Yes}}<ref name="scala-lang.org/files/archive" /> || {{Yes}}<ref name=scala-lang.org.collections.overview>{{cite web|title=Mutable and Immutable Collections|url=http://docs.scala-lang.org/overviews/collections/overview.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{cite web|title=The Neophyte's Guide to Scala Part 12: Type Classes|url=http://danielwestheide.com/blog/2013/02/06/the-neophytes-guide-to-scala-part-12-type-classes.html|access-date=29 November 2013}}</ref> || {{Yes}} || 2004 | | [[Scala (programming language)|Scala]] || {{No}}<ref name=scala-lang.org.archives.files.ScalaOverview>{{cite web|title=Scala Overview|url=http://www.scala-lang.org/old/sites/default/files/linuxsoft_archives/docu/files/ScalaOverview.pdf|access-date=26 November 2013}}</ref> || {{Yes}}<ref name=scala-lang.org.files.ScalaExample>{{cite web|title=Scala by Example|url=http://www.scala-lang.org/docu/files/ScalaByExample.pdf|access-date=26 November 2013}}</ref> || style="background:#8CF; text-align:center"|Static<ref name="scala-lang.org.archives.files.ScalaOverview" /> || {{Yes}}<ref name="scala-lang.org/files/archive">{{cite web|title=Scala Reference|url=http://www.scala-lang.org/files/archive/nightly/pdfs/ScalaReference.pdf|access-date=26 November 2013}}</ref> || {{Yes}}<ref name="scala-lang.org/files/archive" /> || {{Yes}}<ref name=scala-lang.org.collections.overview>{{cite web|title=Mutable and Immutable Collections|url=http://docs.scala-lang.org/overviews/collections/overview.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{cite web|title=The Neophyte's Guide to Scala Part 12: Type Classes|url=http://danielwestheide.com/blog/2013/02/06/the-neophytes-guide-to-scala-part-12-type-classes.html|access-date=29 November 2013}}</ref> || {{Yes}} || 2004 | ||
|- | |- | ||
| [[JavaScript]] || {{No}} | | [[JavaScript]] || {{No}} || {{Partial|Extension}}<ref>{{cite web|last=Tao|first=Dan|title=Lazy.js|url=http://danieltao.com/lazy.js/|work=Dan Tao|access-date=26 November 2013}}</ref> || style="background:#FC6; text-align:center"|Dynamic<ref>{{cite web|title=JavaScript Overview|url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/JavaScript_Overview|work=Mozilla Developer Network|access-date=26 November 2013}}</ref> || {{Partial|Extension}}<ref>{{cite web|last=Frank|first=Thomas|title=Add some klass to JavaScript|url=http://www.thomasfrank.se/klass.html|work=thomasfrank.com|access-date=26 November 2013|archive-url=https://web.archive.org/web/20131208100043/http://thomasfrank.se/klass.html|archive-date=8 December 2013|url-status=dead}}</ref> || {{Partial|Extension}}<ref>{{cite web|last=Faubion|first=Nathan|title=ADT|url=https://npmjs.org/package/adt|work=NPM|publisher=Joyent, nodejitsu|access-date=26 November 2013}}</ref> || {{Partial}}<ref>[[Immutable object]]</ref><ref>{{cite web|title=Javascript Data structures|url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures|work=Mozilla Developer Network|access-date=26 November 2013}}</ref> || {{Dunno}} || {{Yes}} || 1995 | ||
|- | |- | ||
| [[Clean (programming language)|Clean]] || {{Yes}}<ref name="clean-faq">{{cite web | url=http://clean.cs.ru.nl/FAQ | title=FAQ - Clean}}</ref> || {{Yes}}, with optional strictness annotations<ref name="clean-report">{{cite book|last1=Plasmeijer|first1=Rinus|last2=Van Eekelen|first2=Marko|last3=Van Groningen|first3=John|title=Clean Version 2.2 Language Report|date=December 2011|publisher=Department of Software Technology, University of Nijmegen|url=http://clean.cs.ru.nl/download/doc/CleanLangRep.2.2.pdf|access-date=23 May 2018}}</ref> || style="background:#99F; text-align:center"|Static with [[Uniqueness type|uniqueness]]/optionally dynamic<ref name="clean-wiki">{{cite web | url=http://clean.cs.ru.nl/Clean | title=Clean}}</ref> || {{Yes}}<ref name="clean-report"/> || {{Yes}}<ref name="clean-report"/> || {{Yes}}, except for unique types<ref name="clean-report"/> || {{Yes}}<ref name="clean-report"/> || {{Yes}} || 1987 | | [[Clean (programming language)|Clean]] || {{Yes}}<ref name="clean-faq">{{cite web | url=http://clean.cs.ru.nl/FAQ | title=FAQ - Clean}}</ref> || {{Yes}}, with optional strictness annotations<ref name="clean-report">{{cite book|last1=Plasmeijer|first1=Rinus|last2=Van Eekelen|first2=Marko|last3=Van Groningen|first3=John|title=Clean Version 2.2 Language Report|date=December 2011|publisher=Department of Software Technology, University of Nijmegen|url=http://clean.cs.ru.nl/download/doc/CleanLangRep.2.2.pdf|access-date=23 May 2018}}</ref> || style="background:#99F; text-align:center"|Static with [[Uniqueness type|uniqueness]]/optionally dynamic<ref name="clean-wiki">{{cite web | url=http://clean.cs.ru.nl/Clean | title=Clean}}</ref> || {{Yes}}<ref name="clean-report"/> || {{Yes}}<ref name="clean-report"/> || {{Yes}}, except for unique types<ref name="clean-report"/> || {{Yes}}<ref name="clean-report"/> || {{Yes}} || 1987 | ||
| Line 31: | Line 31: | ||
| [[Miranda (programming language)|Miranda]] || {{Yes}}<ref name=miranda.org.uk>{{cite web | url=http://miranda.org.uk/ | title=Miranda Official Website}}</ref> || {{Yes2}}Default<ref name="http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Lazy">{{cite web | url=http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Lazy | title=An Overview of Miranda}}</ref> || style="background:#8CF; text-align:center"|Static<ref name=miranda.org.uk/> || {{Yes}}<ref name="http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Abstract">{{cite web | url=http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Abstract | title=An Overview of Miranda}}</ref> || {{Yes}}<ref name="miranda.org.uk" /> || {{Yes}} || {{No}} || {{Yes}} || 1986 | | [[Miranda (programming language)|Miranda]] || {{Yes}}<ref name=miranda.org.uk>{{cite web | url=http://miranda.org.uk/ | title=Miranda Official Website}}</ref> || {{Yes2}}Default<ref name="http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Lazy">{{cite web | url=http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Lazy | title=An Overview of Miranda}}</ref> || style="background:#8CF; text-align:center"|Static<ref name=miranda.org.uk/> || {{Yes}}<ref name="http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Abstract">{{cite web | url=http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Abstract | title=An Overview of Miranda}}</ref> || {{Yes}}<ref name="miranda.org.uk" /> || {{Yes}} || {{No}} || {{Yes}} || 1986 | ||
|- | |- | ||
| [[SASL (programming language)|SASL]] || {{Yes}}<ref>Turner, D.A. "An Implementation of SASL". University of St. Andrews, Department of Computer Science Technical Report. TR/75/4.</ref> || {{Yes}} || style="background:#FC6; text-align:center"|Dynamic<ref name="From Semantics to Computer Science">{{cite book | url=https://books.google.com/books?id=W2baKp7710sC&q=sasl+dynamic+typing&pg=PA128 | title=Kahn networks at the dawn of functional programming| isbn=9780521518253| last1=Kahn| first1=Gilles| last2=Bertot| first2=Yves| last3=Huet| first3=Gérard| last4=Lévy| first4=Jean-Jacques| last5=Plotkin| first5=Gordon| date=2009-09-24}}</ref> || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || 1972 | | [[SASL (programming language)|SASL]] || {{Yes}}<ref>Turner, D.A. "An Implementation of SASL". University of St. Andrews, Department of Computer Science Technical Report. TR/75/4.</ref> || {{Yes}} || style="background:#FC6; text-align:center"|Dynamic<ref name="From Semantics to Computer Science">{{cite book | url=https://books.google.com/books?id=W2baKp7710sC&q=sasl+dynamic+typing&pg=PA128 | title=Kahn networks at the dawn of functional programming| isbn=9780521518253| last1=Kahn| first1=Gilles| last2=Bertot| first2=Yves| last3=Huet| first3=Gérard| last4=Lévy| first4=Jean-Jacques| last5=Plotkin| first5=Gordon| date=2009-09-24| publisher=Cambridge University Press}}</ref> || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || 1972 | ||
|- | |- | ||
| [[Elixir (programming language)|Elixir]] || {{No}} || {{Partial | | [[Elixir (programming language)|Elixir]] || {{No}} || {{Partial|Stream module<ref name="https://hexdocs.pm/elixir/Stream.html">{{cite web | url=https://hexdocs.pm/elixir/Stream.html| title=Stream — Elixir v1.17.2}} </ref>}} || style="background:#FC6; text-align:center"|Dynamic || {{Yes}} || {{No}} || {{Yes}} || {{Dunno}} || {{Yes}} || 2012 | ||
|- | |- | ||
| [[Erlang (programming language)|Erlang]] || {{No}} || {{No}}<ref name=erlang.org>{{cite web | url=http://www.erlang.org/doc/reference_manual/expressions.html#id76539| access-date=27 November 2013 | title=Erlang Reference Manual}}</ref> || style="background:#FC6; text-align:center"|Dynamic || {{Yes}}<ref>{{cite web | url=http://www.erlang.org/eeps/eep-0029.html | title=Erlang Programming Language - Abstract Patterns}}</ref> || {{No}} || {{Yes}}<ref name=stackoverflow.com>{{cite web | url=https://stackoverflow.com/questions/2715517/how-do-i-modify-a-record-in-erlang | access-date=15 December 2013 | title=Stack Overflow - How do I modify a record in erlang?}}</ref> || {{Dunno | | [[Erlang (programming language)|Erlang]] || {{No}} || {{No}}<ref name=erlang.org>{{cite web | url=http://www.erlang.org/doc/reference_manual/expressions.html#id76539| access-date=27 November 2013 | title=Erlang Reference Manual}}</ref> || style="background:#FC6; text-align:center"|Dynamic || {{Yes}}<ref>{{cite web | url=http://www.erlang.org/eeps/eep-0029.html | title=Erlang Programming Language - Abstract Patterns}}</ref> || {{No}} || {{Yes}}<ref name=stackoverflow.com>{{cite web | url=https://stackoverflow.com/questions/2715517/how-do-i-modify-a-record-in-erlang | access-date=15 December 2013 | title=Stack Overflow - How do I modify a record in erlang?}}</ref> || {{Dunno}} || {{Yes}} || 1986 | ||
|- | |- | ||
| [[Elm (programming language)|Elm]] || {{Yes}} || {{No}} || style="background:#8CF; text-align:center"|Static<ref name=elm-lang.org.blog.interactiveProgramming>{{cite web | url=http://elm-lang.org/blog/Interactive-Programming.elm | access-date=29 November 2013 | title=Elm Blog - Interactive Programming | archive-url=https://web.archive.org/web/20131006235603/http://elm-lang.org/blog/Interactive-Programming.elm | archive-date=6 October 2013 | url-status=dead }}</ref> || {{dunno}} || {{Yes}}<ref name=elm-lang.org.learn.syntax>{{cite web | url=http://elm-lang.org/learn/Syntax.elm#algebraic-data-types | access-date=29 November 2013 | title=Elm Syntax - Algebraic Data Types | archive-url=https://web.archive.org/web/20160313052210/http://elm-lang.org/learn/syntax.elm#algebraic-data-types | archive-date=13 March 2016 | url-status=dead }}</ref> || {{Yes}}<ref name=elm-lang.org.blog.interactiveProgramming /> || {{No}} || {{Yes}} || 2012 | | [[Elm (programming language)|Elm]] || {{Yes}} || {{No}} || style="background:#8CF; text-align:center"|Static<ref name=elm-lang.org.blog.interactiveProgramming>{{cite web | url=http://elm-lang.org/blog/Interactive-Programming.elm | access-date=29 November 2013 | title=Elm Blog - Interactive Programming | archive-url=https://web.archive.org/web/20131006235603/http://elm-lang.org/blog/Interactive-Programming.elm | archive-date=6 October 2013 | url-status=dead }}</ref> || {{dunno}} || {{Yes}}<ref name=elm-lang.org.learn.syntax>{{cite web | url=http://elm-lang.org/learn/Syntax.elm#algebraic-data-types | access-date=29 November 2013 | title=Elm Syntax - Algebraic Data Types | archive-url=https://web.archive.org/web/20160313052210/http://elm-lang.org/learn/syntax.elm#algebraic-data-types | archive-date=13 March 2016 | url-status=dead }}</ref> || {{Yes}}<ref name=elm-lang.org.blog.interactiveProgramming /> || {{No}} || {{Yes}} || 2012 | ||
| Line 41: | Line 41: | ||
| [[Futhark (programming language)|Futhark]] || {{Yes}} || {{No}} || style="background:#8CF; text-align:center"|Static<ref name=futhark-lang.org.docs.inference>{{cite web | url=https://futhark.readthedocs.io/en/latest/language-reference.html#type-inference | access-date=24 July 2023 | title=Type Inference}}</ref> || {{Yes}} || {{Yes}} || {{Yes}}<ref name=elm-lang.org.blog.interactiveProgramming /> || {{No}} || {{Yes}} || 2014 | | [[Futhark (programming language)|Futhark]] || {{Yes}} || {{No}} || style="background:#8CF; text-align:center"|Static<ref name=futhark-lang.org.docs.inference>{{cite web | url=https://futhark.readthedocs.io/en/latest/language-reference.html#type-inference | access-date=24 July 2023 | title=Type Inference}}</ref> || {{Yes}} || {{Yes}} || {{Yes}}<ref name=elm-lang.org.blog.interactiveProgramming /> || {{No}} || {{Yes}} || 2014 | ||
|- | |- | ||
| [[Python (programming language)|Python]] || {{No}}<ref>{{cite web | url=https://docs.python.org/3/howto/functional.html | title=Functional Programming in Python}}</ref> || {{Partial}} | | [[Python (programming language)|Python]] || {{No}}<ref>{{cite web | url=https://docs.python.org/3/howto/functional.html | title=Functional Programming in Python}}</ref> || {{Partial|Simulated with generators}} || style="background:#FC6; text-align:center"|Dynamic<ref>{{cite web | url=https://docs.python.org/3/faq/general.html#what-is-python | title=What is Python?}}</ref> || {{Yes}}<ref>{{cite web | url=http://www.cs.utexas.edu/~byoung/cs313e/slides5-adt.pdf | title=Abstract Data Types and Stacks}}</ref> || {{No}} || {{Partial}}<ref>[[Immutable object]]</ref> || {{Dunno}} || {{Yes}} || 1991 | ||
|- | |- | ||
| [[Idris (programming language)|Idris]] || {{Yes}}<ref name=idris-lang.org>{{cite web|title=Idris Overview|url=http://www.idris-lang.org/|access-date=6 December 2013}}</ref> || {{Yes}}<ref name="idris-lang.org" /> || style="background:#8CF; text-align:center"|Static<ref name="idris-lang.org" /> || {{Yes}}<ref name="idris-lang.org" /> || {{Yes}}<ref name="idris-lang.org" /> || {{Yes}}<ref name="idris-lang.org" /> || {{Yes}}<ref name="idris-lang.org" /> || {{Yes}} || 2007 | | [[Idris (programming language)|Idris]] || {{Yes}}<ref name=idris-lang.org>{{cite web|title=Idris Overview|url=http://www.idris-lang.org/|access-date=6 December 2013}}</ref> || {{Yes}}<ref name="idris-lang.org" /> || style="background:#8CF; text-align:center"|Static<ref name="idris-lang.org" /> || {{Yes}}<ref name="idris-lang.org" /> || {{Yes}}<ref name="idris-lang.org" /> || {{Yes}}<ref name="idris-lang.org" /> || {{Yes}}<ref name="idris-lang.org" /> || {{Yes}} || 2007 | ||
|- | |- | ||
| [[Software:Nix (package manager)|Nix]] || {{Yes}} || {{ | | [[Software:Nix (package manager)|Nix]] || {{Yes}}<ref name="nix language">{{cite web|title=Nix Language - Nix 2.34.0 Reference Manual|url=https://nix.dev/manual/nix/2.34/language/}}</ref> || {{Yes}}<ref name="nix language" /> || style="background:#FC6; text-align:center"|Dynamic<ref name="nix language" /> || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || 2003 | ||
|- | |- | ||
|[[Wolfram Language]] | |[[Wolfram Language]] | ||
| Line 58: | Line 58: | ||
| 1988 | | 1988 | ||
|- | |- | ||
|[[Kotlin | |[[Software:Kotlin|Kotlin]] | ||
|{{No}} | |{{No}} | ||
|{{Partial | |{{Partial|Lazy delegation<ref>{{cite web |url=https://kotlinlang.org/docs/reference/delegated-properties.html |title=Kotlin - Delegated Properties}}</ref> and Sequence<ref>{{cite web |url=https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/ |title=kotlin-stdlib - kotlin.sequences}}</ref>}} | ||
|style="background:#8CF; text-align:center"|Static | |style="background:#8CF; text-align:center"|Static | ||
|{{Yes}} | |{{Yes}} | ||
| Line 77: | Line 77: | ||
|{{Yes}} | |{{Yes}} | ||
|{{No}} | |{{No}} | ||
|{{ | |{{Partial|Swift uses [[Automatic Reference Counting]], which differs from [[Tracing garbage collection|tracing garbage collection]] but is designed to provide similar benefits with better performance.}} | ||
| 2014 | | 2014 | ||
|- | |- | ||
| Line 87: | Line 87: | ||
|{{No}} | |{{No}} | ||
|{{Partial}}<ref name=julia-typing/> | |{{Partial}}<ref name=julia-typing/> | ||
|{{Dunno | |{{Dunno}} | ||
|{{Yes}} | |{{Yes}} | ||
| 2012 | | 2012 | ||
| Line 104: | Line 104: | ||
|[[Rust (programming language)|Rust]] | |[[Rust (programming language)|Rust]] | ||
|{{No}} | |{{No}} | ||
|{{Partial}} | |{{Partial|Lazy iterators}}<ref>{{cite web | url=https://doc.rust-lang.org/book/ch13-02-iterators.html | title=The Rust Programming Language, Processing a Series of Items with Iterators }}</ref> and external libraries<ref>{{cite web | url=https://crates.io/crates/lazy | title=Rust crate 'lazy'}}</ref> | ||
|style="background:#8CF; text-align:center"|Static<ref>{{cite web |url=https://doc.rust-lang.org/book/ch03-02-data-types.html | title=The Rust Programming Language, Data Types}}</ref> | |style="background:#8CF; text-align:center"|Static<ref>{{cite web |url=https://doc.rust-lang.org/book/ch03-02-data-types.html | title=The Rust Programming Language, Data Types}}</ref> | ||
|{{Yes}}<ref name="rust-traits">{{cite web | url=https://doc.rust-lang.org/book/ch10-02-traits.html | title=The Rust Programming Language, Traits}}</ref> | |{{Yes}}<ref name="rust-traits">{{cite web | url=https://doc.rust-lang.org/book/ch10-02-traits.html | title=The Rust Programming Language, Traits}}</ref> | ||
| Line 120: | Line 120: | ||
|{{Yes}} | |{{Yes}} | ||
|{{Yes}} | |{{Yes}} | ||
|{{ | |{{Dunno}} | ||
|{{Yes}} | |{{Yes}} | ||
|2019 | |2019 | ||
|- | |- | ||
| [[D (programming language)|D]] | | [[D (programming language)|D]] | ||
| {{ | | {{Partial|Optional}}<ref>{{cite web|title=D pure functions|url=https://dlang.org/spec/function.html#pure-functions|access-date=3 February 2024}}</ref><ref>{{cite web|title=D safe functions|url=https://dlang.org/spec/function.html#safe-functions|access-date=3 February 2024}}</ref> | ||
| {{ | | {{Partial|Optional}}<ref>{{cite web|title=Laziness - Dlang Tour|url=https://tour.dlang.org/tour/en/basics/laziness|access-date=7 April 2020}}</ref> | ||
| style="background:#8CF; text-align:center"|Static<ref>{{cite web|title=Type System|url=https://dlang.org/spec/type.html|access-date=7 April 2020}}</ref> | | style="background:#8CF; text-align:center"|Static<ref>{{cite web|title=Type System|url=https://dlang.org/spec/type.html|access-date=7 April 2020}}</ref> | ||
| {{dunno}} | | {{dunno}} | ||
| Line 134: | Line 134: | ||
| {{Yes}}<ref>{{cite web|title=Garbage Collection|url=https://dlang.org/spec/garbage.html|access-date=7 April 2020}}</ref> | | {{Yes}}<ref>{{cite web|title=Garbage Collection|url=https://dlang.org/spec/garbage.html|access-date=7 April 2020}}</ref> | ||
| 2001 | | 2001 | ||
|- | |||
| Gleam || {{No}}<ref name = Gleam>{{cite web | url=https://gleam.run/frequently-asked-questions/#will-gleam-have-type-classes | title=Frequently asked questions – Gleam }}</ref> || {{Partial|Experimental external libraries}} || style="background:#8CF; text-align:center"|Static || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || 2019 | |||
|} | |} | ||
| Line 140: | Line 141: | ||
{{reflist|3}} | {{reflist|3}} | ||
{{Programming paradigms navbox}} | |||
[[Category:Functional languages| ]] | [[Category:Functional languages| ]] | ||
{{Sourceattribution|Comparison of functional programming languages}} | {{Sourceattribution|Comparison of functional programming languages}} | ||
Latest revision as of 01:48, 24 May 2026
Short description: none
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[1] | Simulated with thunks[2] | Dynamic[3] | Yes[4] | Extension[5] | No[6] | ? | Yes | 1984 |
| Scheme | No[7] | Yes[8] | Dynamic[7] | Yes[9] | Simulated with thunks[10] | No[11] | No | Yes | 1975 |
| Racket | No | Default in Lazy Racket[12] | Strong, Dynamic, statically typed with gradual typing in Typed Racket[13] | Yes[14] | Yes, with Algebraic Racket[15] | Partial[16] | No | Yes | 1995 |
| Clojure | No[17] | Yes[18] | Dynamic[19] | Yes[20] | Yes[21] | Yes[22] | No | Yes | 2007 |
| Standard ML | No[23] | No[24][25] | Static[26] | Yes | Yes | Yes[27] | No | Yes | 1983 |
| OCaml | No[28] | Yes[28] | Static[29] | Yes[30] | Yes[31] | Yes[32] | Simulated with parametric modules[33] | Yes | 1996 |
| F# | No[34] | Yes[35] | Static[36] | Yes[37] | Yes[38] | Yes[39] | No | Yes | 2005 |
| Haskell | Yes[40] | Default[41] | Static[42] | Yes[40] | Yes[43] | Yes[44] | Yes[45] | Yes | 1990 |
| Scala | No[46] | Yes[47] | Static[46] | Yes[48] | Yes[48] | Yes[49] | Yes[50] | Yes | 2004 |
| JavaScript | No | Extension[51] | Dynamic[52] | Extension[53] | Extension[54] | Partial[55][56] | ? | Yes | 1995 |
| Clean | Yes[57] | Yes, with optional strictness annotations[58] | Static with uniqueness/optionally dynamic[59] | Yes[58] | Yes[58] | Yes, except for unique types[58] | Yes[58] | Yes | 1987 |
| Miranda | Yes[60] | Default[61] | Static[60] | Yes[62] | Yes[60] | Yes | No | Yes | 1986 |
| SASL | Yes[63] | Yes | Dynamic[64] | Yes | Yes | Yes | No | Yes | 1972 |
| Elixir | No | Stream module[65] | Dynamic | Yes | No | Yes | ? | Yes | 2012 |
| Erlang | No | No[66] | Dynamic | Yes[67] | No | Yes[68] | ? | Yes | 1986 |
| Elm | Yes | No | Static[69] | ? | Yes[70] | Yes[69] | No | Yes | 2012 |
| Futhark | Yes | No | Static[71] | Yes | Yes | Yes[69] | No | Yes | 2014 |
| Python | No[72] | Simulated with generators | Dynamic[73] | Yes[74] | No | Partial[75] | ? | Yes | 1991 |
| Idris | Yes[76] | Yes[76] | Static[76] | Yes[76] | Yes[76] | Yes[76] | Yes[76] | Yes | 2007 |
| Nix | Yes[77] | Yes[77] | Dynamic[77] | No | Yes | Yes | No | Yes | 2003 |
| Wolfram Language | No | No | Static | Yes | Yes | Yes | No | Yes | 1988 |
| Kotlin | No | Lazy delegation[78] and Sequence[79] | 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[80] | Dynamic[81] | Yes[81] | No | Partial[81] | ? | Yes | 2012 |
| PureScript | Yes | No | Static | Yes | Yes | Yes | Yes | Yes | 2013 |
| Rust | No | Lazy iterators[82] and external libraries[83] | Static[84] | Yes[85] | Yes[86] | Yes[87] | Yes, through traits[85] | No | 2010 |
| Bosque | No | No | Static | Yes | Yes | Yes | ? | Yes | 2019 |
| D | Optional[88][89] | Optional[90] | Static[91] | ? | Yes | Yes[92] | No | Yes[93] | 2001 |
| Gleam | No[94] | Experimental external libraries | Static | Yes | Yes | Yes | No | Yes | 2019 |
References
- ↑ "LISP Introduction". http://www.math-cs.gordon.edu/courses/cps323/LISP/lisp.html.
- ↑ Antoniotti, Marco. "CLAZY: Lazy Calling in Common Lisp". http://common-lisp.net/project/clazy/.
- ↑ Tratt, Laurence (July 2009). "Dynamically Typed Languages". Advances in Computers 77: 149–184. doi:10.1016/s0065-2458(09)01205-4. http://tratt.net/laurie/research/pubs/html/tratt__dynamically_typed_languages/. Retrieved 26 November 2013.
- ↑ "LISP Tutorial Lecture 3: Data Abstraction". http://www.cs.sfu.ca/CourseCentral/310/pwfong/Lisp/3/tutorial3.html.
- ↑ "Algebraic data types in Common Lisp". https://github.com/stylewarning/cl-algebraic-data-type.
- ↑ "Mutable Data Structures". http://caml.inria.fr/pub/docs/fpcl/fpcl-07.pdf.
- ↑ 7.0 7.1 "Similar Functional Languages". http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora202.html.
- ↑ "(Scheme) 17. Lazy Evaluation". http://www.shido.info/lisp/scheme_lazy_e.html.
- ↑ "Records - Revised6 Report on the Algorithmic Language Scheme". http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib.html.
- ↑ "Algebraic Data Types in Scheme". https://pavpanchekha.com/blog/adtscm.html.
- ↑ "Programs with State". http://www.cs.uni.edu/~wallingf/teaching/cs3540/sessions/session26.html.
- ↑ Barzilay, Eli. "Lazy Racket". https://docs.racket-lang.org/lazy/index.html.
- ↑ Tobin-Hochstadt, Sam; St-Amour, Vincent; Dobson, Eric; Takikawa, Asumu. "Typed Racket". https://docs.racket-lang.org/ts-reference/index.html.
- ↑ "The Racket Guide: Programmer-Defined Datatypes". https://docs.racket-lang.org/guide/define-struct.html.
- ↑ Griffis, Eric. "Algebraic Racket". https://docs.racket-lang.org/algebraic/index.html.
- ↑ Buttrick, Matthew. "Beautiful Racket: Data Structures". https://beautifulracket.com/explainer/data-structures.html.
- ↑ "Clojure Functional Programing". http://clojure.org/functional_programming.
- ↑ "Clojure - lazy". http://clojure.org/lazy.
- ↑ "Exploring clojure: dynamic typing". 7 December 2012. http://tgoossens.wordpress.com/2012/12/07/dynamically-exploring-clojure/.
- ↑ Engelberg, Mark (21 April 2009). "Thoughts On Programming". http://programming-puzzler.blogspot.com/2009/04/adts-in-clojure.html.
- ↑ "clojure-contrib, typing example". https://code.google.com/p/clojure-contrib/source/browse/trunk/src/clojure/contrib/types/examples.clj?spec=svn596&r=596.
- ↑ "clojure: functional programming overview". http://clojure.org/functional_programming.
- ↑ "Introduction to Functional Programming". http://www.cl.cam.ac.uk/~jrh13/slides/funprog-jrh/l8.pdf.
- ↑ "Lazy and Eager Evaluation". http://homepages.inf.ed.ac.uk/dts/fps/lecture-notes/lazy.pdf.
- ↑ Harper, MacQueen, Milner. "Standard ML". Section 3.6. http://www.lfcs.inf.ed.ac.uk/reports/86/ECS-LFCS-86-2/ECS-LFCS-86-2.pdf.
- ↑ Wikibooks:Standard ML Programming/Types
- ↑ "Mutable and optional data". http://courses.cs.washington.edu/courses/cse341/04wi/lectures/08-ml-refs.html.
- ↑ 28.0 28.1 "Functional Programming – OCaml". http://ocaml.org/learn/tutorials/functional_programming.html.
- ↑ Hickey, Jason. "Introduction to Objective Caml". Section 2.4. Cambridge University Press. http://files.metaprl.org/doc/ocaml-book.pdf.
- ↑ "Type and exception definitions". http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual016.html.
- ↑ "Learn OCaml - Data Types". http://ocaml.org/learn/description.html#DataTypes.
- ↑ "Learn OCaml - Imperative Features". http://ocaml.org/learn/description.html#Imperativefeatures.
- ↑ "Implementing Type-Classes as OCaml Modules". https://accu.org/index.php/journals/2445.
- ↑ "Learning F#". http://fsharpforfunandprofit.com/learning-fsharp/.
- ↑ "Lazy Computations (F#)". Microsoft Developer Network. http://msdn.microsoft.com/en-us/library/vstudio/dd233247.aspx.
- ↑ "About F#". http://fsharp.org/about/index.html.
- ↑ "Structures - F#". https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/structures.
- ↑ "Discriminated Unions". 15 September 2021. https://msdn.microsoft.com/en-us/library/dd233226.aspx.
- ↑ "The F# 3.0 Language Specification: 1.1.2 Making Data Simple". http://fsharp.org/about/files/spec.pdf.
- ↑ 40.0 40.1 "Haskell Wiki". http://www.haskell.org.
- ↑ "Haskell Wiki Lazy Evaluation". http://www.haskell.org/haskellwiki/Lazy_evaluation.
- ↑ "Haskell Typing". HaskellWiki. http://www.haskell.org/haskellwiki/Typing.
- ↑ "Haskell Wiki Abstract Data Type". http://www.haskell.org/haskellwiki/Abstract_data_type.
- ↑ "Haskell Wiki". http://www.haskell.org/haskellwiki/Functional_programming#Immutable_data.
- ↑ "Type Classes and Overloading". http://www.haskell.org/tutorial/classes.html.
- ↑ 46.0 46.1 "Scala Overview". http://www.scala-lang.org/old/sites/default/files/linuxsoft_archives/docu/files/ScalaOverview.pdf.
- ↑ "Scala by Example". http://www.scala-lang.org/docu/files/ScalaByExample.pdf.
- ↑ 48.0 48.1 "Scala Reference". http://www.scala-lang.org/files/archive/nightly/pdfs/ScalaReference.pdf.
- ↑ "Mutable and Immutable Collections". http://docs.scala-lang.org/overviews/collections/overview.html.
- ↑ "The Neophyte's Guide to Scala Part 12: Type Classes". http://danielwestheide.com/blog/2013/02/06/the-neophytes-guide-to-scala-part-12-type-classes.html.
- ↑ Tao, Dan. "Lazy.js". Dan Tao. http://danieltao.com/lazy.js/.
- ↑ "JavaScript Overview". Mozilla Developer Network. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/JavaScript_Overview.
- ↑ Frank, Thomas. "Add some klass to JavaScript". thomasfrank.com. http://www.thomasfrank.se/klass.html.
- ↑ Faubion, Nathan. "ADT". NPM. Joyent, nodejitsu. https://npmjs.org/package/adt.
- ↑ Immutable object
- ↑ "Javascript Data structures". Mozilla Developer Network. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures.
- ↑ "FAQ - Clean". http://clean.cs.ru.nl/FAQ.
- ↑ 58.0 58.1 58.2 58.3 58.4 Plasmeijer, Rinus; Van Eekelen, Marko; Van Groningen, John (December 2011). Clean Version 2.2 Language Report. Department of Software Technology, University of Nijmegen. http://clean.cs.ru.nl/download/doc/CleanLangRep.2.2.pdf. Retrieved 23 May 2018.
- ↑ "Clean". http://clean.cs.ru.nl/Clean.
- ↑ 60.0 60.1 60.2 "Miranda Official Website". http://miranda.org.uk/.
- ↑ "An Overview of Miranda". http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Lazy.
- ↑ "An Overview of Miranda". http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Abstract.
- ↑ Turner, D.A. "An Implementation of SASL". University of St. Andrews, Department of Computer Science Technical Report. TR/75/4.
- ↑ Kahn, Gilles; Bertot, Yves; Huet, Gérard; Lévy, Jean-Jacques; Plotkin, Gordon (2009-09-24). Kahn networks at the dawn of functional programming. Cambridge University Press. ISBN 9780521518253. https://books.google.com/books?id=W2baKp7710sC&q=sasl+dynamic+typing&pg=PA128.
- ↑ "Stream — Elixir v1.17.2". https://hexdocs.pm/elixir/Stream.html.
- ↑ "Erlang Reference Manual". http://www.erlang.org/doc/reference_manual/expressions.html#id76539.
- ↑ "Erlang Programming Language - Abstract Patterns". http://www.erlang.org/eeps/eep-0029.html.
- ↑ "Stack Overflow - How do I modify a record in erlang?". https://stackoverflow.com/questions/2715517/how-do-i-modify-a-record-in-erlang.
- ↑ 69.0 69.1 69.2 "Elm Blog - Interactive Programming". http://elm-lang.org/blog/Interactive-Programming.elm.
- ↑ "Elm Syntax - Algebraic Data Types". http://elm-lang.org/learn/Syntax.elm#algebraic-data-types.
- ↑ "Type Inference". https://futhark.readthedocs.io/en/latest/language-reference.html#type-inference.
- ↑ "Functional Programming in Python". https://docs.python.org/3/howto/functional.html.
- ↑ "What is Python?". https://docs.python.org/3/faq/general.html#what-is-python.
- ↑ "Abstract Data Types and Stacks". http://www.cs.utexas.edu/~byoung/cs313e/slides5-adt.pdf.
- ↑ Immutable object
- ↑ 76.0 76.1 76.2 76.3 76.4 76.5 76.6 "Idris Overview". http://www.idris-lang.org/.
- ↑ 77.0 77.1 77.2 "Nix Language - Nix 2.34.0 Reference Manual". https://nix.dev/manual/nix/2.34/language/.
- ↑ "Kotlin - Delegated Properties". https://kotlinlang.org/docs/reference/delegated-properties.html.
- ↑ "kotlin-stdlib - kotlin.sequences". https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/.
- ↑ "Noteworthy Differences from Other Languages - The Julia Language". https://docs.julialang.org/en/v1/manual/noteworthy-differences/.
- ↑ 81.0 81.1 81.2 "Types - The Julia Language". https://docs.julialang.org/en/v1/manual/types/.
- ↑ "The Rust Programming Language, Processing a Series of Items with Iterators". https://doc.rust-lang.org/book/ch13-02-iterators.html.
- ↑ "Rust crate 'lazy'". https://crates.io/crates/lazy.
- ↑ "The Rust Programming Language, Data Types". https://doc.rust-lang.org/book/ch03-02-data-types.html.
- ↑ 85.0 85.1 "The Rust Programming Language, Traits". https://doc.rust-lang.org/book/ch10-02-traits.html.
- ↑ "The Rust Programming Language, Enums". https://doc.rust-lang.org/book/ch06-00-enums.html.
- ↑ "The Rust Programming Language, Variables and Mutability". https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html.
- ↑ "D pure functions". https://dlang.org/spec/function.html#pure-functions.
- ↑ "D safe functions". https://dlang.org/spec/function.html#safe-functions.
- ↑ "Laziness - Dlang Tour". https://tour.dlang.org/tour/en/basics/laziness.
- ↑ "Type System". https://dlang.org/spec/type.html.
- ↑ "Immutable - Dlang Tour". https://tour.dlang.org/tour/en/basics/immutability.
- ↑ "Garbage Collection". https://dlang.org/spec/garbage.html.
- ↑ "Frequently asked questions – Gleam". https://gleam.run/frequently-asked-questions/#will-gleam-have-type-classes.
Template:Programming paradigms navbox
