ML is a general-purpose
functional programming language developed by
Robin Milner and others in the late 1970s at the
University of Edinburgh,
[1] whose syntax is inspired by
ISWIM. Historically, ML stands for
metalanguage it was conceived to develop proof tactics in the
LCF theorem prover (whose language,
pplambda, a combination of the
first-order predicate calculus and the simply typed
polymorphic lambda-calculus, had ML as its metalanguage). It is known for its use of the
Hindley-Milner type inference algorithm, which can automatically infer the
types of most
expressions without requiring explicit type annotations.
ML is often referred to as an impure functional language, because it does not encapsulate side-effects, unlike purely functional programming languages such as Haskell.
Features of ML include a call-by-value evaluation strategy, first class functions, automatic memory management through garbage collection, parametric polymorphism, static typing, type inference, algebraic data types, pattern matching, and exception handling.
Unlike Haskell, ML uses eager evaluation, which means that all subexpressions are always evaluated. However, lazy evaluation can be achieved through the use of closures. Thus one can create and use infinite streams as in Haskell, however, their expression is comparatively indirect.