• [^] # Re: Un peu faible

    Posté par . En réponse au journal Les types fantômes. Évalué à 6.

    Je dirais même plus: pas besoin de langage fonctionnel pour faire ça, on peut y arriver avec n'importe quel langage fortement typé… Et même en C, en bidouillant un peu pour profiter du fait que les structures en C sont fortement typées:

    #include <stdio.h> 
    typedef char* string_t ;
    typedef struct prenom { string_t string; } prenom_t;
    typedef struct nom { string_t string; } nom_t;
    nom_t make_nom(string_t string) { nom_t nom = {string}; return nom; };
    prenom_t make_prenom(string_t string) { prenom_t prenom = {string}; return prenom; };
    string_t from_nom(nom_t nom) { return nom.string; };
    string_t from_prenom(prenom_t prenom) { return prenom.string; };
    void main(void)
    {
     /* prenom_t prenom = make_nom("Matthieu"); */ /* Erreur: initialisation invalide. */
     prenom_t prenom = make_prenom("Matthieu"); /* OK */
     /* printf("%s\n", from_nom(prenom)); */ /* Erreur: erreur: incompatible type for argument 1 of ‘from_nom’. */
     printf("%s\n", from_prenom(prenom)); /* OK. */
    return 0;
    }
    
    

    Les vrais types fantômes sont definis par le fait que ce sont des types paramètres, mais dont le paramètre n'apparait pas dans la définition: http://www.haskell.org/haskellwiki/Phantom_type

    http://l-lang.org/ - Conception du langage L