Sangat disayangkan banyak literatur tentang masalah ini sangat padat. Saya juga berada di posisi Anda. Saya mendapatkan pengantar pertama saya untuk subjek dari Bahasa Pemrograman: Aplikasi dan Interpretasi
http://www.plai.org/
Saya akan mencoba meringkas ide abstrak diikuti dengan detail yang tidak langsung saya temukan dengan jelas. Pertama, jenis inferensi dapat dianggap menghasilkan dan kemudian memecahkan kendala. Untuk menghasilkan batasan, Anda mengulang melalui pohon sintaks dan menghasilkan satu atau lebih batasan pada setiap node. Misalnya, jika node adalah +operator, operan dan hasilnya harus berupa angka. Node yang menerapkan suatu fungsi memiliki tipe yang sama dengan hasil dari fungsi tersebut, dan seterusnya.
Untuk bahasa tanpa let, Anda dapat menyelesaikan kendala di atas secara membabi buta dengan substitusi. Sebagai contoh:
(if (= 1 2)
1
2)
di sini, kita dapat mengatakan bahwa kondisi pernyataan jika harus Boolean, dan bahwa jenis pernyataan jika adalah sama dengan jenis yang thendan elseklausa. Karena kita tahu 1dan 2adalah angka, dengan substitusi, kita tahu ifpernyataannya adalah angka.
Di mana hal-hal menjadi buruk, dan apa yang saya tidak bisa mengerti untuk sementara waktu, berurusan dengan biarkan:
(let ((id (lambda (x) x)))
(id id))
Di sini, kita telah terikat idke sebuah fungsi yang mengembalikan apa pun yang telah Anda teruskan, atau dikenal sebagai fungsi identitas. Masalahnya adalah jenis parameter fungsi xberbeda pada setiap penggunaan id. Yang kedua idadalah fungsi tipe a -> a, di mana abisa menjadi apa saja. Yang pertama adalah tipe (a -> a) -> (a -> a). Ini dikenal sebagai let-polymorphism. Kuncinya adalah memecahkan kendala dalam urutan tertentu: pertama-tama selesaikan kendala untuk definisi id. Ini akan menjadi a -> a. Kemudian baru, salinan terpisah dari jenis iddapat diganti menjadi batasan untuk setiap tempat iddigunakan, misalnya a2 -> a2dan a3 -> a3.
Itu tidak mudah dijelaskan dalam sumber daya online. Mereka akan menyebutkan algoritma W atau M tetapi tidak bagaimana mereka bekerja dalam hal memecahkan kendala, atau mengapa tidak muncul pada let-polimorfisme: masing-masing algoritma tersebut memberlakukan urutan untuk memecahkan kendala.
Saya menemukan sumber daya ini sangat membantu untuk mengikat Algoritma W, M, dan konsep umum pembuatan kendala dan menyelesaikan semuanya bersama-sama. Ini sedikit padat, tapi lebih baik dari banyak:
http://www.cs.uu.nl/research/techreps/repo/CS-2002/2002-031.pdf
Banyak makalah lain di sana juga bagus:
http://people.cs.uu.nl/bastiaan/papers.html
Saya harap itu membantu menjelaskan dunia yang agak suram.