Rust is really missing higher kinded types, though. You can do a lot of neat haskell tricks with it, but you still can't write functions that are generic over "monads" for example. You have to write a function for lists, a function for options and a function for results, you can't really treat them as the _same thing_, even though they all have similar methods.
Rust semantics owes a lot to ML, but the borrow checker makes programming in Rust very different from other ML-derived languages, which are almost all garbage-collected.