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 -> t1ou (t1 -> t2) -> (t1 -> t2)onde t1e t2são variáveis de tipo.
Não consigo pensar em uma maneira de obter algo assim t1 -> t2ou 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.)