INF6120 - Laboratoire 10
Sommaire
Pour ce laboratoire, nous allons utiliser les exemples typing.ml
et inference.ml
du dépôt d’exemples.
Ce labo réplique certains exercices du laboratoire précédente, mais en faisant des modifications dans les exemples de typages plutôt que dans l’interpréteur.
Vérification de types
Types de fonctions
Soit les fonctions suivantes :
let f = fun x y -> x + y
let g = fun a b -> a (b + 1)
let rec h = fun x -> h x
Les réécrire en annotant avec des informations de typage.
Ajout de comparaisons
Dans typing.ml
:
- Définir les opérateurs
<
et>
qui opèrent sur des nombres. Utiliser un typage fort. - Définir l’opérateur
=
qui compare les types primitifs du langage (booléens, entiers). Utiliser un typage fort.
Nombres réels
Dans typing.ml
: ajouter le support pour des nombres réels (représentés par le type float
en OCaml), de façon à ce que :
- on aie un constructeur
Float
pour introduire une expression représentant un réel - les opérations mathématiques soient supportés sur les flottants avec un typage strict (on ne peut pas additionner un réel avec un entier par exemple)
Inférence de types
Types de fonctions
Soit les fonctions suivantes :
let f = fun x y -> x + y
let g = fun a b -> a (b + 1)
let rec h = fun x -> h x
Procéder à une inférence de type à la main :
- Quelles sont les contraintes déduites pour chaque fonction ?
- Résoudre les contraintes pour trouver un type unique, quand c’est possible.
Ajout de comparaisons
Dans inference.ml
:
- Définir les opérateurs
<
et>
qui opèrent sur des nombres. Utiliser un typage fort. - Définir l’opérateur
=
qui compare les types primitifs du langage (booléens, entiers). Utiliser un typage fort.
Nombres réels
Dans inference.ml
: ajouter le support pour des nombres réels (représentés par le type float
en OCaml), de façon à ce que :
- on aie un constructeur
Float
pour introduire une expression représentant un réel - les opérations mathématiques soient supportés sur les flottants avec un typage strict (on ne peut pas additionner un réel avec un entier par exemple)