In this post, I explain a trick for avoiding duplication of types between .ml and .mli files that will be familiar to anyone who's worked with Jane Street codebases. The problemOCaml compilation units live a double life: one as source code (foo.ml) and one as header information (foo.mli). This works well in encouraging abstraction, so you'll often see less type information in the .mli than in the