ML is just as good for algorithms & complex data structures (H-M+ inferred static typing, pattern matching, etc.), and has optional laziness (in OCaml, and IIRC as an extension to some SML implementations), but is usually easier to translate to more conventional languages as necessary.
My ML experience has mostly been OCaml-flavored. The best OCaml book I've seen is _Developing Applications with Objective Caml_ (In French, but a free English translation is online at http://caml.inria.fr/pub/docs/oreilly-book/html/index.html). It covers a slightly older version of the language, but that mostly impacts libraries.
Andrew Appel's _Modern Compiler Implementation in ML_ and _Compiling with Continuations_ are both great compiler books, which happen to use SML for the code.
Joshua Smith's _Practical OCaml_ is bad. Really bad. I was shocked. Avoid.
Chris Okasaki's _Purely Functional Data Structures_ is a great data structure / algorithm book, and uses SML (but has an appendix with Haskell versions). Also quite good.
Finally, experience with Lisp, Prolog, and Haskell carry over to ML somewhat, if you've used those.
I've also been looking at Modern Compiler Implementation in ML, but have no experience in compilers (no courses, work, anything). Should I read Aho first, or is that one I could dive right into?
I haven't read the newer edition of the dragon book, but MCIiML is a much better starting place than the old dragon.
Relevant recent comments:
http://news.ycombinator.com/item?id=1820858 (on parsing + how I feel about the dragon book)
http://news.ycombinator.com/item?id=1822515 (more book, etc. suggestios)