Merge branch 'pryor'
[lambda.git] / family_tree_of_functional_programming_languages.mdwn
index 0086483..dd4c1c3 100644 (file)
@@ -100,12 +100,16 @@ the seminar.
 Most programming languages, functional or not, use **strict/eager evaluation**. For
 instance, languages of the ML family are all statically-typed functional
 languages with strict/eager evaluation. These include [[!wikipedia Standard ML desc="SML"]] and
-[[!wikipedia Caml]] and [[!wikipedia Nemerle]]. Other statically-typed
-functional languages with strict/eager evaluation are [[!wikipedia Scala (programming language) desc="Scala"]] and
-[[!wikipedia Coq]]. Like Scheme, many of these languages permit *imperatival*
-as well as functional coding; but they are regarded as functional programming
-languages because they are so hospitable to functional programming, and give it
-a central place in their design.
+[[!wikipedia Caml]] and [[!wikipedia Nemerle]]. SML in turn has several variants
+or implementations: [[!wikipedia MLton]], [[!wikipedia SML/NJ]], [[!wikipedia Moscow ML]],
+and [[!wikipedia Mythryl]].
+
+Other statically-typed functional languages with strict/eager evaluation are
+[[!wikipedia Scala (programming language) desc="Scala"]] and [[!wikipedia
+Coq]]. Like Scheme, many of these languages permit *imperatival* as well as
+functional coding; but they are regarded as functional programming languages
+because they are so hospitable to functional programming, and give it a central
+place in their design.
 
 A few languages such as [[!wikipedia Miranda (programming language) desc="Miranda"]] and [[!wikipedia Haskell (programming language) desc="Haskell"]] are
 statically-typed languages that instead mostly use **lazy evaluation**. However,