Précédent Index Suivant

1.8   Environnement initial

Le langage mini-ML possède un certain nombre de fonctions prédéfinies. Ces fonctions munies de leur type correspondent à l'environnement initial de typage. Il peut être créé de la manière suivante :


# let initial_typing_env =
let mk_type (ct1,ct2,ct3) =
Forall([],
Fun_type (Pair_type(Const_type ct1, Const_type ct2),Const_type ct3))
in
let int_ftype = mk_type(Int_type,Int_type,Int_type)
and float_ftype = mk_type(Float_type,Float_type,Float_type)
and int_predtype = mk_type(Int_type,Int_type,Bool_type)
and float_predtype = mk_type(Float_type,Float_type,Bool_type)
and alpha = Var_type(ref(Unknown 1))
and beta = Var_type(ref(Unknown 2))
in
("=",Forall([ 1 ],
Fun_type (Pair_type (alpha,alpha), Const_type Bool_type)))::
(List.map (function s -> (s,int_ftype))
[ "*"; "+"; "-"; "/" ]) @
(List.map (function s -> (s,float_ftype))
[ "*."; "+."; "-."; "/." ]) @
(List.map (function s -> (s,int_predtype))
[ "<"; ">"; "<="; ">=" ]) @
(List.map (function s -> (s,float_predtype))
[ "<."; ">."; "<=."; ">=." ]) @
[ "^", mk_type (String_type, String_type, String_type) ] @
[ ("hd",Forall([ 1 ], Fun_type (List_type alpha, alpha)));
("tl",Forall([ 1 ], Fun_type (List_type alpha, List_type alpha)));
("null",Forall([ 1 ], Fun_type (alpha,
Fun_type (List_type alpha, Const_type Bool_type))));
("fst",Forall([ 1; 2 ], Fun_type (Pair_type (alpha,beta),alpha)));
("snd",Forall([ 1; 2 ], Fun_type (Pair_type (alpha,beta),beta))) ]
;;
val initial_typing_env : (string * quantified_type) list =
["=", Forall ([1], Fun_type (Pair_type (...), Const_type ...));
"*", Forall ([], Fun_type (Pair_type (...), Const_type ...)); ...]

Précédent Index Suivant