I like SML both out of nostalgia and for its actual merits, but I don't think that's true. SML was far ahead of its time, but it's showing its age now. Its simplicity is also correlated with an absence of handy features (e.g. ad-hoc polymorphism). Many companies invest in OCaml, which is slightly more crufty but with a (much) more healthy ecosystem, yet it hasn't taken over the world.
I do wonder what would have happened if SML had "won". In many ways it was pragmatically engineered in the early 90s, at a time where no other functional language was comparable (except maybe Caml). Its much-vaunted formal specification does leave a few pragmatics-shaped holes, however. For example, SML has no standardised way of splitting programs into multiple files. Each compiler does their own thing (although at least MLton and MLKit both support MLB files).
We haven't hit the limits of what the language is capable of and a major investment would drastically speed up the process.
I agree. I think about this a lot, and the hard part is that you need to either have an already existing ecosystem, or to have the resources to build one. If you want to leverage an existing ecosystem, the best bet would be Go I think, as .Net already has F#, Java has Scala (they are not the same but too close and would eat each other), JS has TS, some OCaml, Purescript. The other option could be to have an easy interop with Rust, as it's becoming quite big too, and perhaps fits SML more.
Investing in the ecosystem (tooling, VSCode support, packages) would vastly improve it, but it still has some warts compared to Haskell - no ability to auto derive implementations (like debugging/printing structures!), and lack of typeclasses can be painful at times.
I really like Rust because of how similar it is to what I believe SML could be - just take away ownership and change the syntax, and bam!
It's the pragmatic ML. Unlike Haskell, it believes in side effects, optional mutation, and eager evaluation, but within a type system that is much more sound than the ones used in any of the most common languages.
It was designed with students and student implementors in mind, so is quite easy to learn (and implement). Despite this, it has the potential to be very fast with MLton compiling fast code (I'd say about as fast as golang).
It's also interesting in being pretty much the only unpopular language with very good threading support. Perhaps this is due to academic use, but CML (or PolyML's version) are very powerful, but decently easy to use (and I'd consider them a straight upgrade from golang's version of channels).
If a major company invested in the SML ecosystem, it would take over the programming world.