Despite it's age, SML feels very young in many ways; SML had features that mainstream languages would not pick up for decades and are still being experimented with today.
Here are some of ML's "cutting-edge" features:
SML was originally designed for developping proofs about first-order predicate calculus (read: computer programs) and it can have a distinct academic feel about it.
However it's emphasis on immutability and strong typing has led SML to be used in many fields where program correctness is paramount (compiler design, code analysis, financial systems, medical systems, etc...).
Learning SML makes you a better programmer, because it forces you to write code that is stateless and to use closures effectively.
It's also many programmers first introduction to pattern matching and (truely) strong typing. And because SML's type system is so strong and well-thought out, it often feels like you are working in a dynamically typed language instead.
There are several popular implementations:
You can find information on the language on each implementation's sites.Join the Standard ML track
fun fib 0 = 0 | fib 1 = 1 | fib n = fib (n - 1) + fib (n - 2)
What I like about it is that I am able to solve the challenges in a TDD way working in a environment that I am familiar (my own PC not a browser IDE) and the cherry on the top of the cake is that I have access to code reviews.
These are a few of the 25 exercises on the Standard ML track. You can see all the exercises here.