I've recently started a mini-project in OCaml, having some Haskell background.
The worst thing so far is that you have to declare and define functions before using them. This results in unimportant utility functions being at the top, and the most important functions being at the bottom of a file.
I haven't had much issue with let bindings, however that might be because my functions are fairly simple for now.
> The worst thing so far is that you have to declare and define functions before using them.
That's an extremely good thing.
Unordered definitions and where are some of Haskell worst decisions with lazy by default, overuse of operators and a community which sadly think point-free is desirable.
That's the kind of choices which makes Ocaml a lot more readable.
I guess it's a matter of taste, for me reading the generics and big picture first is more important than the details. Maybe it's my programming skills, but my files start with some five or ten string manipulation utilities and helpers. I honestly do not even care about their implementation, a name would suffice. Which is why I also like `where` approach much more than `let ... in`: it allows you to read the general idea, postponing the details to later (if you want to go into them).
However, I agree on laziness, operators and point-free.
This is generally a pro for me. I can skip to the bottom of a file and see what the main purpose of it is, knowing that it's the only place that could reference everything else in the file.
The worst thing so far is that you have to declare and define functions before using them. This results in unimportant utility functions being at the top, and the most important functions being at the bottom of a file.
I haven't had much issue with let bindings, however that might be because my functions are fairly simple for now.