That's funny because I feel the opposite. An interface file saves me from having to wade through the implementation details and lets me focus on the exact parts that are relevant to me as a reader of the code. And yes odoc is nice too but the source of its usefulness usually comes from the fact that it's generated from a carefully curated interface file.
Would type "dehints" be the best of both worlds: you IDE could hide all the types (just like with type hints it adds them) and you could toggle them to eg hide when reading the code? But then also you could toggle them back when needed instead of having to open an interface file?
OCaml IDEs including emacs can do that already, and yes it's a good thing.
In my opinion the best of both worlds would just be to have Rust-style inline annotations and an "interface mode" that hides implementations (most modern IDEs can already do that) and non-public function.
BTW I am not sure why you would want to hide the types, I find them always useful.
I agree that the usefulness of documentation systems such as odoc comes from a carefully curated interface, but I disagree with them needing a separate file which in my experience is cause of friction.
Other languages (I am familiar with Rust and Python) also have documentation systems that only show you public methods (and functions, types, etc.), and I find them equally useful as odoc. They just take the visibility information from inline annotations (which are enforced by the compiler, in the case of Rust) instead of a separate file.
Re:Two Years of OCaml
by delta_p_delta_x on Tuesday May 02, 2023 @07:53AM
(#35786142)
> I find .mli files to be in all ways inferior to the "inline" approach Rust (amongst others) take
Agreed. The same criticism can be levelled at C and C++ with header and implementation files.
On the other hand the OCaml/interface files approach is superior when you want to read documentation w/o implementation, but in practice using odoc is superior because you get hyperlinks.
In 10 years of using OCaml, I think everytime I interacted with mli I'd rather the author annotated types at the definition site.