3.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)))::
*
(map (function s ® (s,int_ftype)) [ ``*''``+''``-''``/'' ]) @
*
(map (function s ® (s,float_ftype)) [ ``*.''``+.''``-.''``/.'' ]) @
*
(map (function s ® (s,int_predtype)) [ ``<''``>''``<=''``>='' ]) @
*
(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([ 12 ], Fun_type (Pair_type (alpha,beta),alpha)))
*
(``snd'',Forall([ 12 ], Fun_type (Pair_type (alpha,beta),beta))) ]
*
;;