Tôi đang đọc về thuật toán gõ Hindley-Milner trong khi viết một triển khai và thấy rằng, miễn là mọi biến bị ràng buộc, bạn sẽ luôn nhận được các loại nguyên tử hoặc các loại trong đó các đối số sẽ xác định loại cuối cùng, chẳng hạn như t1 -> t1
hoặc (t1 -> t2) -> (t1 -> t2)
trong đó t1
và t2
là các biến loại.
Tôi không thể nghĩ ra cách bạn nhận được một cái gì đó giống t1 -> t2
hoặc đơn giản t1
, mà tôi hiểu có nghĩa là thuật toán bị hỏng vì sẽ không có cách nào để xác định loại biểu thức thực tế. Làm thế nào để bạn biết bạn sẽ không bao giờ có được một loại như những loại "bị hỏng" miễn là mọi biến đều bị ràng buộc?
Tôi biết thuật toán mang lại các loại với các biến, nhưng chúng luôn được giải quyết một khi bạn truyền các đối số cho hàm, điều này sẽ không xảy ra trong một hàm có kiểu t1 -> t2
. Đây là lý do tại sao tôi muốn biết làm thế nào chúng ta biết chắc chắn thuật toán sẽ không bao giờ mang lại các loại như vậy.
(Có vẻ như bạn có thể nhận được các loại "bị hỏng" này trong ML , nhưng tôi đang hỏi về phép tính lambda.)