TYPE/BINDING CHECK : typage
------------------------------------------------------------
Type effectif :
- implémente l'équivalence de type
- et aussi le typage "fonctionnel" des macros, en prennant en compte le polymorphisme et la sucharge des opérations numériques
N.B. Pour ce qui est de l'équivalence, pour l'instant c'est un peu du luxe, vu qu'on n'a que des types simples ...
----------------------------------------------------------
pour typer les variables et les expressions
type t =
| TEFF_weight
| TEFF_except
| TEFF_trace
| TEFF_data of basic
| TEFF_list of basic
| TEFF_tuple of basic list
| TEFF_any of string * any_cond
| TEFF_ref of basic
and any_cond = t -> t option
GESTION DES PROFILS
décomposition (param/res)
TYPES USUELS
val get_data_tuple : t list -> t
val tuple_to_data_list : t -> t list
val is_data_profile : profile -> bool
PROFILS USUELS on utilise les mnémo. b -> bool i -> int n -> int ou real x -> int ou real ou bool t -> trace w -> weight e -> exception
EXPRESSION DE TYPE -> TYPE EFFECTIF
PRETTY-PRINT
val to_string : t -> string
val prof_to_string : profile -> string
val list_to_string : t list -> string
COMPATIBILITÉ DES t lifts_to x y ssi un x peut être utilisé en place d'un y en particulier eq => lifts_to
val lifts_to : t -> t -> bool
RÉSOLUTION DES profils :
- renvoie le type eff du résultat si compatible
- raise Failure ou Invalid_argument sinon