ML (standing for "Meta-Language") is a general-purpose functional programming language developed by Robin Milner and others in the late 1970s at Edinburgh University. ML is often referred to as an impure functional language, because it permits imperative programming, and therefore, side-effects, unlike other functional programming languages such as Haskell.
Features of ML include automatic memory management through garbage collection, a static type-safe, polymorphic type system, type inference, algebraic data types, pattern matching, and a sophisticated module system with functions on modules (functors).
Type inference is a technique which allows the compiler to determine from the code the type of each variable and symbol used in the program, without having to explicitely declare them. This allows for a compact, yet easily readable code.
Algebraic data types allow to define new types as data structures, and combine them in a hierarchical fashion,
Pattern matching is the capacity for a function to deconstruct algebraic data types, into its different subtypes, in order to apply a particular computation for each subtype.
The first ML implementation was written to implement the LCF theorem-proving system. Since then, ML strengths are mostly applied in language design and manipulation (compilers, analyzers, theorem provers), but also in bioinformatics, in financial systems, in a genealogical database, a peer-to-peer client/server program, etc.