I’ve been looking at some of Jane Street’s open source libraries and came across the use of [module]_intf.ml files in combination with [module].ml and [module].mli files. An example of this is applicative, defined in Base
Aside from eliminating the need to write signatures out in both implementation and interfaces files, what are the advantages of this approach?
That’s the main one. This is especially useful when you’re using functors, by the way, since you’d otherwise write out the signatures possibly even more than twice. You probably won’t see this much, if at all, with modules that don’t define functors.