Mini-typeur (inférence de types)
Déduire le type d’un programme de notre langage sans l’exécuter, jusqu’au polymorphisme de let. Quatre carnets guident chaque palier ; le squelette fournit le lexer, le parser et les tests.
Lire le sujetTélécharger le squeletteFascicule d’approfondissement (PDF)
Carnets et repères du sujet
1. Raisonnons avant l’exécution · bronze
Écrivez des règles sur les nombres, les booléens et les branches. Trouvez une erreur de type et une erreur que le typage ne prévient pas.
Slides 6 à 12Elixir : une clause par nœud, with … else · poly, chap. 2 et 5.
2. Résoudre des contraintes · argent
Propagez une substitution, décomposez les types de fonctions et empêchez un type de se contenir lui-même.
Slides 13 à 21Elixir : maps pour la substitution, MapSet · poly, chap. 5.
3. Quel type a cette fonction ? · argent
Créez des inconnues pour les paramètres. Déduisez des contraintes à partir du corps et des appels.
Slides 22 à 29Elixir : un état en map, Enum.map_reduce/3 · poly, chap. 5.
4. Réutiliser une identité · or
Généralisez les bonnes inconnues à let, puis instanciez à chaque usage. Expliquez pourquoi un paramètre reste monomorphe.
Slides 30 à 38Elixir : MapSet.difference/2, Enum.reduce/3 · poly, chap. 5.
