With the current standard library if I suddenly want to use Int32.of_int, I know I just need to type Int32.of_int in my source. With your proposal I need to remember that it is in Data.Numeric and go at the beginning of my file to open it or write Data.Numeric.Int32.of_int, to me this brings bureaucracy without any benefit. And lack of bureaucracy is one of the reasons I like ocaml (and dislike java for example).

Besides Hierarchies are anyway limited in their descriptive power and one day you'll find something that will fit in two places, Rope is already an example being both Data.Persistent and Data.Text.

 I use modules in the same way, mostly to be able to grep Int32.of_int in my code when needed (as greping for of_int only would make the result less precise).


Thus my proposal would be to _present_ them as a hierarchy (but even here a mean to tag/browse the modules with/by keywords would do a better job) but keep the actual module structure of Batteries as flat as possible, everything just under the toplevel Batteries. When I code I really don't want to have to think about all these open directives that essentially bring nothing.

tag system for modules is a good idea,  and I would like to add that type search for functions (which is already done by ocamlbrowser) is also nice.
--
Thomas