Ocaml is designed by people who wouldn't know "clean" or "consistent" if it raped them in a back alley.
In my case, what broke the camel's back was a global namespace for all records within a module. For those of you not familiar with the terminology, think of being unable to have the same name inside two different structs. Those of you who've ever done 3D (a.x, a.y, a.z!) will be screaming about now.
I can rant and rave all day about all the stupidities in Ocaml, but it's not going to be fixed. Look elsewhere unless you'd like a death by a thousand cuts.