Different people use Ocaml for different things. It’s a wide-spectrum language, with few limitations. But it does have limitations (some of which are being worked-on). I use three languages: Ocaml, Perl, and C++. Professionally I used Java a ton. Here’s the reasoning for each language:
I use Perl when I need to write something not-too-complex, and I need to write it -fast-, and sure, it needs to run fast, but not -that- fast. Especially for string-handling, Perl kicks butt.
I use C++ when I need to write something not-too-complex (though it’s OK if it’s more complex than for Perl) but it needs to run -blazingly- fast, or maybe there are serious memory-consumption constraints (truly giant data-sets).
I use Ocaml when the problem is really complex (hence could benefit from precise types) and while performance is required, absolute blazing speed isn’t. Specifically, Ocaml doesn’t (yet) use SMP/multicore, so the program will be effectively limited to a single core.
And when I worked with Java professionally, I wrote all my tools in Perl and Ocaml. All. Of. Them. Because Java is neither good for writing code quickly, nor for writing blazing fast code, nor for writing complex code.
Hope this helps. Ocaml is a wide-spectrum language. But it really shines when you have a really complex problem, you have a little time to write the code, and you need a fast solution, but not a -really-, -really- fast solution. Of course, if you need a really, really fast solution, there’s only one answer: C++.