On peut définit la consultation comme le retrait d'un élément suivi de son ajout; les autres composantes sont inchangées:
cpile.ml
type 'a pile = 'a Pile.pile
let créer = Pile.créer
(* la ligne suivante, necessaire, n'est pas possible dans la version 2.04 *)

exception Vide = Pile.Vide 
let ajouter = Pile.ajouter
let retirer = Pile.retirer
let consulter p = let x = Pile.retirer p in Pile.ajouter x p; x;;
cpile.mli
type 'a pile
val créer : unit -> 'a pile
exception Vide
val ajouter : 'a -> 'a pile -> unit
val retirer : 'a pile -> 'a
val consulter : 'a pile -> 'a
Note: Dans les versions antérieure à 3.00, le renommage d'une exception ``exception Vide = Pile.Vide'' n'était pas possible. Le seul moyen de contourner le problème est alors d'exporter une fonction permettant d'attraper une exception (un handler):
let attrape_vide f x f' x' =
  try f x with Vide -> f' x';;
dans le fichier pile.ml avec l'interface suivante:
val attrape_vide : ('a -> 'b) -> 'a -> ('c -> 'b) -> 'c -> 'b
Et de ré-exporte attrape_vide dans cpile.ml.