English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

FAQ - Langage de modules

Puis-je avoir deux unités de compilateurs / modules / signatures / foncteurs mutuellement récursifs ?
Actuellement pas dans la partie stable dans le langage. Il existe par contre une extension d'OCaml (qui peut donc être supprimée ou modifiée à tout instant) qui résoud certains de ces problèmes.
Comment puis-je exprimer des contraintes de partage entre modules ?
Utilisez des spécifications de types explicites dans les arguments des foncteurs. Par exemple, si les deux signatures suivantes sont définies,
module type S1 = sig ... type t ... end
module type S2 = sig ... type u ... end
Pour définir un foncteur F qui prend en arguments deux paramètres X:S1 et Y:S2 tels X.t et Y.u sont identiques, écrivez:
module F (X: S1) (Y: S2 with type u = X.t) =
  struct ... end
En interne, ceci est en effet expansé en
module F (X: S1) (Y: sig ... type u = X.t ... end) =
  struct ... end
Les unités de compilation sont forcément des modules. Comment puis-je avoir une unité qui soit plutôt un foncteur ou une signature ?
En OCaml les foncteurs et les signatures (types de modules) peuvent être des composants de modules. Il suffit donc de transformer le foncteur ou la signature en un élément d'une unité de compilation. Un bon exemple de cette approche est le module Set de la librairie standard.