Je lis à propos de l'algorithme de typage Hindley-Milner lors de l'écriture d'une implémentation, et je vois que, tant que chaque variable est liée, vous obtiendrez toujours des types atomiques ou des types où les arguments détermineront le type final, comme t1 -> t1
ou (t1 -> t2) -> (t1 -> t2)
où t1
et t2
sont des variables de type.
Je ne peux pas penser à un moyen d'obtenir quelque chose comme t1 -> t2
ou simplement t1
, ce qui, je crois, signifierait que l'algorithme est cassé car il n'y aurait aucun moyen de déterminer le type réel de l'expression. Comment savez-vous que vous n'obtiendrez jamais un type tel que ceux "cassés" tant que chaque variable est liée?
Je sais que l'algorithme donne des types avec des variables, mais ceux-ci sont toujours résolus une fois que vous passez les arguments à la fonction, ce qui ne serait pas le cas dans une fonction avec type t1 -> t2
. C'est pourquoi je veux savoir comment nous savons avec certitude que l'algorithme ne donnera jamais de tels types.
(Il semble que vous pouvez obtenir ces types "cassés" en ML , mais je pose des questions sur le calcul lambda.)