Voici un premier exemple d'un fichier source en OCaml.
Ce fichier définit un type des vecteurs en 2 dimensions, avec quelques opérations associés, et définit ce qu'est un cercle. Sa structure est relativement simple, il s'agit d'une suite de définition de types (vector) introduits par type, de valeurs (origin, x_unit, create, move, etc.) introduites par let et de modules (Circle) introduits par module.
Un module est lui-même une suite de définitions de types, de valeurs et de modules. Les modules permettent de grouper le code en ensemble cohérent. En fait, le fichier lui-même, qui s'appelle ici geometry.ml, définit un module Geometry, contenant toutes les définition du fichier.
Le fichier geometry.ml est accompagné d'un fichier de même nom, mais d'extension mli, donc geometry.mli que voici :
Ce fichier décrit ce qui est défini par le module Geometry, sans surprise une liste de types, de valeurs et de modules. Chaque valeur et chaque module est décrit par son type. Les valeurs sont introduites par le mot-clé val, leur identifiant et leur type. Les modules sont décrits par la liste des types, valeurs et modules qu'ils contiennent, de la même façon.
On note que le fichier geometry.mli n'a pas déclaré toutes les valeurs définies dans geometry.ml. Ces valeurs ne sont en fait pas exportées : les valeurs déclarées pourront être utilisées par d'autres modules, celles non-déclarées ne peuvent être utilisées qu'au sein du module Geometry. De même, certains types ou modules auraient pu ne pas être déclarés dans le fichier geometry.mli. De fait, le 'i' de mli tient pour interface : ce fichier décrit comment peut être utilisé le module Geometry. Le fichier d'interface est commenté pour documenter l'utilisation du module associé.