Estou lendo sobre o algoritmo de digitação Hindley-Milner ao escrever uma implementação e vejo que, desde que todas as variáveis sejam vinculadas, você sempre terá tipos atômicos ou tipos em que os argumentos determinarão o tipo final, como t1 -> t1
ou (t1 -> t2) -> (t1 -> t2)
onde t1
e t2
são variáveis de tipo.
Não consigo pensar em uma maneira de obter algo assim t1 -> t2
ou simplesmente t1
, o que entendo significaria que o algoritmo está quebrado, pois não haveria maneira de determinar o tipo real da expressão. Como você sabe que nunca obterá um tipo como esses "quebrados", desde que cada variável esteja vinculada?
Eu sei que o algoritmo gera tipos com variáveis, mas elas sempre são resolvidas quando você passa os argumentos para a função, o que não seria o caso de uma função com type t1 -> t2
. É por isso que quero saber como sabemos com certeza que o algoritmo nunca produzirá esses tipos.
(Parece que você pode obter esses tipos "quebrados" no ML , mas estou perguntando sobre o cálculo lambda.)