Sto leggendo l'algoritmo di tipizzazione Hindley-Milner mentre scrivo un'implementazione e vedo che, finché ogni variabile è vincolata, otterrai sempre tipi o tipi atomici in cui gli argomenti determineranno il tipo finale, come t1 -> t1
o (t1 -> t2) -> (t1 -> t2)
dove t1
e t2
sono variabili di tipo.
Non riesco a pensare a un modo in cui potresti ottenere qualcosa di simile t1 -> t2
o semplice t1
, che capisco significherebbe che l'algoritmo è rotto poiché non ci sarebbe modo di determinare il tipo effettivo dell'espressione. Come fai a sapere che non otterrai mai un tipo come questi "rotti" fino a quando ogni variabile è vincolata?
So che l'algoritmo produce tipi con variabili, ma questi vengono sempre risolti dopo aver passato gli argomenti alla funzione, il che non sarebbe il caso in una funzione con tipo t1 -> t2
. Questo è il motivo per cui voglio sapere come sappiamo per certo che l'algoritmo non produrrà mai tali tipi.
(Sembra che tu possa ottenere questi tipi "rotti" in ML , ma sto chiedendo del calcolo lambda.)