Précédent Index Suivant

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))) ]
* ;;
Précédent Index Suivant