• # Un peu faible

    Posté par . 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 :

    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.