Mengapa Haskell tidak memiliki abstraksi lambda tipe-level?

22

Apakah ada beberapa alasan teoretis untuk itu (seperti pemeriksaan tipe atau inferensi tipe menjadi tidak dapat dipastikan), atau alasan praktis (terlalu sulit untuk diterapkan dengan benar)?

Saat ini, kita bisa membungkusnya menjadi newtypeseperti

newtype Pair a = Pair (a, a)

dan kemudian Pair :: * -> *

tetapi kita tidak dapat melakukan sesuatu seperti λ(a:*). (a,a).

(Ada beberapa bahasa yang memilikinya, misalnya, Scala melakukannya .)

Petr Pudlák
sumber
4
Memilih satu jenis sistem tipe yang digunakan tidak termasuk jenis sistem tipe lain karena semuanya perlu konsisten. Tipe level lambda akan sangat aneh dalam teori kategori ...
tp1
1
stackoverflow.com/questions/4922560/… juga terkait.
Edward Z. Yang

Jawaban:

17

Ketik inferensi dengan jenis level lambdas akan membutuhkan penyatuan urutan yang lebih tinggi yang tidak dapat ditentukan. Ini adalah motivasi untuk melarang mereka. Tetapi seperti yang telah terjadi dengan fitur-fitur lain yang tidak dapat ditentukan (seperti inferensi jenis untuk GADT), dimungkinkan untuk memerlukan tanda tangan jenis dan mengizinkannya. Saya tidak yakin apakah itu sudah diselidiki oleh siapa pun.

agustus
sumber