I remember reading this page making up my mind when choosing between the two.
OCaml has, unlike Standard ML, grown quite a lot since this page was made.
In particular, the section "Standard libraries", I'd recommend looking at:
https://dev.realworldocaml.org/
A couple of places where the comparison is outdated:
- OCaml using Base [1] allows for result-type oriented programming
- OCaml using Base uses less language magic and more module system
While there was and is truth to the distinction that SML is for scientists and OCaml is for engineers, this dichotomy is getting dated: OCaml is under active development, which means that scientists who want better tooling will choose OCaml. For example, 1ML [2] by Andreas Rossberg was built in OCaml.
[1]: https://opensource.janestreet.com/base/ [2]: https://github.com/rossberg/1ml
https://github.com/rossberg/1ml
There isn't special module syntax. Modules are more-or-less just structs, and the structs can contain types.
But I think Rossberg has since moved on, and his latest attempt at a "better ML design" should be 1ML[0].
The module syntax is certainly clumsy in comparison to the rest of the language, and it's not just the syntax - everything about functor arguments is a bit murky.