# Guidance on .mli files

**URL:** <https://discuss.ocaml.org/t/guidance-on-mli-files/4575>\
**Category:** Learning\
**Created:** [October 24, 2019, 12:17pm UTC](https://discuss.ocaml.org/t/guidance-on-mli-files/4575 "2019-10-24T12:17:44Z")\
**Posts on this page:** 1\
**Showing post:** 7

<div class="post-metadata">

**Author:** ![yawaramin](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/yawaramin/32/3384_2.png) [@yawaramin](https://discuss.ocaml.org/u/yawaramin)\
**Post date:** [October 24, 2019, 2:39pm UTC](https://discuss.ocaml.org/t/guidance-on-mli-files/4575/7 "2019-10-24T14:39:18Z")

</div>

> [@enetsee](#):
>
> Could you say more about this? I feel uncomfortable using it but I haven’t got a compelling example with which I could explain to others why I do so.

Sure, I think this is a pretty compelling argument against it: [Serious OPAM package quality issues - #54 by ivg](https://discuss.ocaml.org/t/serious-opam-package-quality-issues/484/54)

> [@enetsee](#):
>
> In this case we aren’t exposing _all_ of the other modules, `NonEmptyList.ml` is not currently exposed

In this case you can again use dune to hide the module which should not be exposed, see the `(private_modules ...)` stanza here: [Stanza Reference — Dune documentation](https://dune.readthedocs.io/en/stable/dune-files.html)

---

_[View the full topic](https://discuss.ocaml.org/t/guidance-on-mli-files/4575)._
