Saya mulai memahami bagaimana forall
kata kunci digunakan dalam apa yang disebut "tipe eksistensial" seperti ini:
data ShowBox = forall s. Show s => SB s
Namun, ini hanya sebagian dari cara forall
penggunaannya dan saya tidak bisa menggunakan pikiran saya dalam hal-hal seperti ini:
runST :: forall a. (forall s. ST s a) -> a
Atau jelaskan mengapa ini berbeda:
foo :: (forall a. a -> a) -> (Char, Bool)
bar :: forall a. ((a -> a) -> (Char, Bool))
Atau semuanya RankNTypes
...
Saya cenderung lebih memilih bahasa Inggris yang jelas dan bebas jargon daripada jenis bahasa yang normal di lingkungan akademik. Sebagian besar penjelasan yang saya coba baca tentang ini (yang dapat saya temukan melalui mesin pencari) memiliki masalah berikut:
- Mereka tidak lengkap. Mereka menjelaskan satu bagian dari penggunaan kata kunci ini (seperti "tipe eksistensial") yang membuat saya merasa senang sampai saya membaca kode yang menggunakannya dengan cara yang sama sekali berbeda (seperti
runST
,foo
dan dibar
atas). - Mereka padat dengan asumsi bahwa saya telah membaca yang terbaru di cabang matematika diskrit, teori kategori atau aljabar abstrak apa pun yang populer minggu ini. (Jika saya tidak pernah membaca kata-kata "baca makalah apa pun untuk detail implementasi" lagi, itu akan terlalu cepat.)
- Mereka ditulis dengan cara-cara yang sering mengubah konsep-konsep sederhana menjadi tata bahasa dan semantik yang terpelintir dan patah.
Begitu...
Aktif ke pertanyaan aktual. Adakah yang bisa sepenuhnya menjelaskan forall
kata kunci dalam bahasa Inggris yang jelas dan sederhana (atau, jika ada di suatu tempat, tunjukkan penjelasan yang jelas yang saya lewatkan) yang tidak menganggap saya seorang ahli matematika yang menguasai jargon?
Diedit untuk menambahkan:
Ada dua jawaban menonjol dari yang berkualitas tinggi di bawah ini, tetapi sayangnya saya hanya dapat memilih satu sebagai yang terbaik. Jawaban Norman terperinci dan bermanfaat, menjelaskan berbagai hal dengan cara yang menunjukkan beberapa landasan teoretis forall
dan pada saat yang sama menunjukkan kepada saya beberapa implikasi praktisnya. jawaban yairchumencakup area yang tidak disebutkan orang lain (variabel tipe cakupan) dan mengilustrasikan semua konsep dengan kode dan sesi GHCi. Apakah mungkin untuk memilih keduanya sebagai yang terbaik, saya akan melakukannya. Sayangnya saya tidak bisa dan, setelah memeriksa kedua jawaban dengan cermat, saya telah memutuskan bahwa yairchu sedikit keluar dari Norman karena kode ilustratif dan penjelasan terlampir. Ini agak tidak adil, karena saya benar-benar membutuhkan kedua jawaban untuk memahami ini sampai pada titik yang forall
tidak meninggalkan saya dengan rasa takut yang samar ketika saya melihatnya dalam jenis tanda tangan.