"Standard ML". A really neat "mostly functional" programming language.
The language and standard library of SML are formally defined in the book Definition of Standard ML. This is unusually thorough. (There is a copy at the WaikatoUniversity library.) The SML Basis Library (part of the standard) is said to be very well designed.
Why ''you'' want to program in ML - ML advocacy and information.
http://www.cs.cmu.edu/rwh/smlbook/ - Introductory text book.
Standard ML of New Jersey is one of the most widely used SML compilers. It generates fast, stable native binaries and runs on a number of platforms. SML/NJ is also nice in terms of giving helpful error information at compile time and being widely used. It has a nice interactive environment which allows you to easily tinker with things quickly (or use it as a desktop calculator if you are so inclined).
MLton The best optimizing compiler for SML. It generates binaries which often run faster than those which gcc(1) produces for C++. It isn't as helpful as SML/NJ if you are new to SML, as its error messages are often slightly cryptic. The easy solution is to use SML/NJ whilst developing your program and then compiling any "release" version with MLTon.
MLKit Another implementation - It's probably best to just stick with MLTon or SML/NJ unless you're interested in the "memory regions" aspect of the MLKit implementation.