Je suis entêté mais en insistant bien je finis par répondre à la question.
Ce n'est pas que la doc soit mal faite c'est plutôt que quelques exemples supplémentaires ne sont pas de trop pour s'épargner quelques déconvenues. Qui surviennent souvent sous la forme de syntax error pas du tout informatifs.
Le plus important avant de licencier renvoyer un module c'est de nommer son type.
Ici MatrixF le type de notre module paramétré :
1 2
| module type MatrixF =
functor (H : Size) -> sig val make : 'a -> 'a array array end |
Après quoi on peut écrire une fonction qui renvoie un élément de ce type :
1 2 3
| let matrix_w w =
let module MatrixW = Matrix (struct let n = w end)
in (module MatrixW : MatrixF) |
On obtient une valeur-module qui peut servir à créer un module statiquement :
module Matrix_2x2 = (val (matrix_w 2) : MatrixF)(struct let n = 2 end)
Ou bien dynamiquement, localement à une fonction :
1 2 3 4
| let make_WxH w h init =
let module M_WxH =
(val (matrix_w w) : MatrixF)(struct let n = h end)
in M_WxH.make init |
Partager