• [^] # Re: Type fantôme

    Posté par . En réponse au journal Une petite histoire d'utilisation type fort dans Ocaml. Évalué à 2. Dernière modification le 18 janvier 2017 à 14:18.

    Pour rendre deux instances du type 'a P.t incompatibles, en choisissant des types incompatibles pour la valeur du type fantôme (int et float dans les exemples de octachron).

    Dans l'usage des modules que j'ai proposé, on avait deux modules A et B dont les types étaient incompatibles : bien que structurellement identiques, comme ils étaient abstraits, les types A.t et B.t étaient incompatibles.

    Dans l'approche avec type fantôme, il n'y a qu'un seul module et les types a P.t et b P.t sont rendus incompatibles par un choix adapté du type fantôme. Un des avantages que je vois, au premier abord, par rapport à ma solution, et que cela évite de dupliquer (dans deux modules distincts) les fonctions qui opèrent sur les types en questions. Tu pourrais, par exemple, définir deux type vides :

    type abs (*coordonnées absolues *)
    type rel (* coordonnées relatives *)

    puis faire un module de coordonnées :

    module Coord : sig
     type 'a t
     (* signatures des opérations *)
    end = struct
     type 'a t = int * int
     (* défintions des opérations *)
    end

    et définir tes variables avec des annotations comme cela :

    let p_abs : abs Coord.t = (* ... *)
    let p_rel : rel Coord.t = (* ... *)

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.