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> typedefchar*string_t;typedefstructprenom{string_tstring;}prenom_t;typedefstructnom{string_tstring;}nom_t;nom_tmake_nom(string_tstring){nom_tnom={string};returnnom;};prenom_tmake_prenom(string_tstring){prenom_tprenom={string};returnprenom;};string_tfrom_nom(nom_tnom){returnnom.string;};string_tfrom_prenom(prenom_tprenom){returnprenom.string;};voidmain(void){/* prenom_t prenom = make_nom("Matthieu"); *//* Erreur: initialisation invalide. */prenom_tprenom=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. */return0;}
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
[^] # Re: Un peu faible
Posté par Matthieu Lemerre . 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:
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