module T :
sig
type +'a t = private string
type nom = [`NOM] t
type prenom = [`PRENOM] t
val cast : string -> 'a t
end =
struct
type 'a t = string
type nom = [`NOM] t
type prenom = [`PRENOM] t
let cast s = s
end
(et éventuellement d'autres fonctions de création.)
Le code est plus générique, et permet en sus des trucs bien sioux. Notez bien par exemple la covariance du type +'a t dans la signature. En la mettant contravariante et à l'aide des variants polymorphes, on peut mimer le sous-typage des records ou des objets. J'ai pas d'exemples simples sous la main, mais la technique est assez employée.
# Un peu faible
Posté par Perthmâd . En réponse au journal Les types fantômes. Évalué à 6.
Ça me paraît être une utilisation très simple des types fantômes, et ça ressemble plus à l'insertion d'une dose de typage nominal en utilisant des signatures de modules que des types fantômes full-fledged©.
La manière de faire usuelle est plutôt du genre :
(et éventuellement d'autres fonctions de création.)
Le code est plus générique, et permet en sus des trucs bien sioux. Notez bien par exemple la covariance du type +'a t dans la signature. En la mettant contravariante et à l'aide des variants polymorphes, on peut mimer le sous-typage des records ou des objets. J'ai pas d'exemples simples sous la main, mais la technique est assez employée.