Merci pour les explications ; c'est vrai que cela fait sens avec l'exemple que tu donnes. Finalement, j'ai bien fait de poster mon commentaire quand même !
L'usage du type fantôme, tel que corrigé par octachron est une solution élégante au problème soulevé dans le journal : puisqu'il s'agit d'un problème qui se pose uniquement à la compilation, autant enrichir le programme avec des annotations, sans pour autant enrichir le format des données.
D'ailleurs, à ce sujet, il est possible de l'exporter dans d'autres langages, ce qui prend l'affirmation donnée dans le journal à contre-pied :
À ma connaissance, seuls les langages fonctionnels typés offrent cette possibilité de différencier des types structurellement identiques, autrement qu'en faisant des classes.
Par exemple, voici un exemple en java dans lequel le type fantôme est transformé en paramètre d'une classe générique :
publicclasstest{publicclassConteneur<A>{/*...*/}/* Cette fonction ne peut recevoir en paramètre que des conteneurs de type Integer */privatevoidworkWithInt(Conteneur<Integer>value){/*...*/}publicvoidmain(){/* Ok */workWithInt(newConteneur<Integer>());/* Erreur */workWithInt(newConteneur<String>());}}
Le principe est le même, on enrichi notre type (ici notre classe), avec des informations qui n'ont pas de rapport avec les données contenues, mais qui permettent d'indiquer au compilateur ce que l'on autorise ou non. Bizarrement, je vois rarement de code java mettre en œuvre cette pratique, qui me paraît pourtant être une manière presque naturelle...
[^] # Re: Type fantôme
Posté par chimrod (site web personnel) . En réponse au journal Une petite histoire d'utilisation type fort dans Ocaml. Évalué à 2.
Merci pour les explications ; c'est vrai que cela fait sens avec l'exemple que tu donnes. Finalement, j'ai bien fait de poster mon commentaire quand même !
L'usage du type fantôme, tel que corrigé par octachron est une solution élégante au problème soulevé dans le journal : puisqu'il s'agit d'un problème qui se pose uniquement à la compilation, autant enrichir le programme avec des annotations, sans pour autant enrichir le format des données.
D'ailleurs, à ce sujet, il est possible de l'exporter dans d'autres langages, ce qui prend l'affirmation donnée dans le journal à contre-pied :
Par exemple, voici un exemple en java dans lequel le type fantôme est transformé en paramètre d'une classe générique :
Le principe est le même, on enrichi notre type (ici notre classe), avec des informations qui n'ont pas de rapport avec les données contenues, mais qui permettent d'indiquer au compilateur ce que l'on autorise ou non. Bizarrement, je vois rarement de code java mettre en œuvre cette pratique, qui me paraît pourtant être une manière presque naturelle...