Keep your standard library standard.
Module Typeclasses
One, immutable string type. Make it UTF-32 by default (you can always store in a smaller format behind the scenes and extend). Make it multiline. Allow variable interpolation (typeclasses should help).
SML structural typing and anonymous records are better than nominal typing.
Skip on syntax bloat like named parameters.
Overload your math operators instead of having special float operators like Ocaml (once again, typeclasses make this much easier).
Rethink imports. F# requires you to add tons of files in the correct order to an XML. Ocaml imports all the things from the folder and blows up if you use the same module name twice. SML needs to standardize `use`. I'd recommend something like JS static import statements.
If you build good documentation, good compiler errors and good tooling, more people coming to the project and help make a better compiler (a reversal of this is the big issue with SML right now in my opinion).
Have a standard iterator type. Syntax wise, something closer to rust would help newcomers (see ReasonML maybe).
- you want `deriving`
- you might want to look at staging (MetaOCaml)
- you might want to look at resource management (uniqueness typing fe)
- you might want to look at paralellism and maybe you can even release it before Ocaml/multicore arrives ;)