Précédent Index Suivant

1.3   Syntaxe des types de mini-ML

L'ensemble des types ( T) de mini-ML est construit à partir d'un ensemble de constantes de types ( C), un ensemble de variables de types ( P) et de 3 constructeurs de types (®, * et list).

La syntaxe abstraite des types de mini-ML est la suivante :

# type vartype =
| Unknown of int
| Instanciated of ml_type
and consttype =
| Int_type
| Float_type
| String_type
| Bool_type
| Unit_type
and ml_type =
| Var_type of vartype ref
| Const_type of consttype
| Pair_type of ml_type * ml_type
| List_type of ml_type
| Fun_type of ml_type * ml_type;;
Où une variable de type est une référence sur une inconnue ou un type. Cela permettra d'effectuer une modification de types lors de l'application d'une substitution sur une variable de type.

La fonction de création de variables de type est la suivante :

# let new_unknown,reset_unknowns =
let c = ref 1 in
( (function () -> c:= !c+1; Var_type( ref(Unknown !c))),
(function () -> c:=1)) ;;
val new_unknown : unit -> ml_type = <fun>
val reset_unknowns : unit -> unit = <fun>


L'ensemble des types qui vient d'être décrit correspondant aux types simples étendus par les constantes de type et les constructeurs pour les paires et les listes. Il est encore nécessaire de définir les schémas de type (type quantified_type).

# type quantified_type = Forall of (int list) * ml_type;;
type quantified_type = | Forall of int list * ml_type



Précédent Index Suivant