• [^] # Re: Type fantôme

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

    À 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 :

    public class test {
     public class Conteneur<A> { /*...*/ }
     /* Cette fonction ne peut recevoir en paramètre que des conteneurs de type Integer */
     private void workWithInt(Conteneur<Integer> value) { /*...*/ }
     public void main() {
     /* Ok */
     workWithInt(new Conteneur<Integer>());
     /* Erreur */
     workWithInt(new Conteneur<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...