Mlton is one of the few whole-program optimizing compilers. One time I wrote a DSL in Standard ML to analyze 100GB+ of memory-mapped data.
Thanks to Mlton, the result was very performant. Thanks to SML, I felt very productive and the result was pretty much bug-free. Highly recommended.
It probably helps that ML [Ullman uses SML/NJ] isn't much on ceremony to begin with. Yet somehow, I never feel like it needs more curly braces and semicolons.
I'd consider Ullman's ML book to be up there with K&R C and Wirth's books in conciseness and clarity. I suggest it to beginners specifically.
EDIT: Btw, thanks for the book!
Anybody have experience in applying it to larger problems?
SML has been on the higher ranks of my to-learn stack, because apparently it has some nice features Haskell does not, most notably I've heard great things about the module system.
The first language is ML and than moves to Racket. Really learned a ton just doing the first weeks. It is more of a CS 202 Programming Languages course which was perfect for me since I really wanted to learn more about functional programming.
Edit. Oh, and here's a previous discussion: https://news.ycombinator.com/item?id=2433860
There are plenty of suggestions here http://www.smlnj.org/doc/literature.html