1 réponse
Il faut bien distinguer l'utilisation des minuscules et des majuscules.
Quand tu fais "Int | String", avec des majuscules, Int et String sont des mots-clés, ce ne sont pas les types usuels int et string, en minuscules. Contrairement à la déclaration "IntV of int | StringV of string" où les mots-clés sont IntV et StringV, et les int et string sont bien les types, pour permettre d'avoir des valeurs associées aux mots clés.
Exemples :
Quand tu fais "Int | String", avec des majuscules, Int et String sont des mots-clés, ce ne sont pas les types usuels int et string, en minuscules. Contrairement à la déclaration "IntV of int | StringV of string" où les mots-clés sont IntV et StringV, et les int et string sont bien les types, pour permettre d'avoir des valeurs associées aux mots clés.
Exemples :
let f = function Int -> "x" | String -> "y";; // val f : stypes -> string = <fun> f Int;; // string = "x" f String;; // string = "y" let g = function IntV v -> (v,"") | StringV v -> (0,v);; // val g : vtypes -> int * string = <fun> g (IntV 1);; // int * string = (1, "") g (IntV 2);; // int * string = (2, "") g (StringV "a");; // int * string = (0, "a") g (StringV "b");; // int * string = (0, "b")La confiance n'exclut pas le contrôle