3.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).
-
constante de type :
Int_type
, Float_type
, String_type
, Bool_type
et Unit_type
Î C : si aÎ C alors aÎ T;
- variable de type Î P :si aÎ P alors aÎ T;.
- type produit : si s, t Î T alors s * t Î T;
- type liste : si s Î T alors s list Î T;
- type fonctionnel : si s, t Î T alors s ® t Î T;
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
*
;;
*
Type vartype defined.
*
Type consttype defined.
*
Type ml_type defined.
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))
*
;;
*
reset_unknowns : unit ® unit = áfunñ
*
new_unknown : unit ® ml_type = á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 defined.