forall
Anahtar kelimenin sözde "varoluş türleri" olarak nasıl kullanıldığını anlamaya başlıyorum :
data ShowBox = forall s. Show s => SB s
Bununla birlikte, forall
bu sadece nasıl kullanıldığı hakkında bir alt kümedir ve aklımı böyle şeylerde kullanımı etrafında satamıyorum:
runST :: forall a. (forall s. ST s a) -> a
Veya bunların neden farklı olduğunu açıklamak için:
foo :: (forall a. a -> a) -> (Char, Bool)
bar :: forall a. ((a -> a) -> (Char, Bool))
Veya tüm bu RankNTypes
şeyler ...
Akademik ortamlarda normal olan dil türlerinden ziyade açık, jargon içermeyen İngilizce'yi tercih ediyorum. Ben bu konuda okumaya çalışıyorum açıklamaların çoğu (arama motorları aracılığıyla bulabilirsiniz olanlar) bu sorunları var:
- Tamamlanmamışlar. Onlar kod okuyana kadar beni mutlu hissettiriyor ( "varoluşsal türleri" gibi) bu anahtar kullanımının bir kısmını açıklamak ki tamamen farklı bir şekilde kullanır bunu (gibi
runST
,foo
vebar
üzeri). - Ayrık matematik, kategori teorisi veya soyut cebirin hangi dalında bu hafta popüler olduğunu en son okuduğum varsayımlarla yoğun bir şekilde doludurlar. (Bir daha asla " uygulama ayrıntıları için ne olursa olsun makaleye danışın" kelimesini okumam, çok yakında olacaktır.)
- Sık sık basit kavramları bile kıvrımlı bükülmüş ve kırılmış dilbilgisi ve semantiğe dönüştürecek şekilde yazılmıştır.
Yani...
Asıl soru üzerine. forall
Anahtar kelimeyi jargonda demlenmiş bir matematikçi olduğumu varsaymayan, açık, düz İngilizce (veya bir yerde varsa, kaçırdığım açık bir açıklamaya işaret eden) tamamen açıklayabilir mi?
Eklemek için düzenlendi:
Aşağıdaki yüksek kaliteli cevaplardan iki çarpıcı cevap vardı, ama ne yazık ki en iyisini seçebiliyorum. Norman'ın cevabı , bazı şeylerin teorik temellerini forall
ve aynı zamanda bana bazı pratik sonuçlarını gösteren bir şekilde açıklayan ayrıntılı ve yararlıydı . yairchu'nun cevabıbaşka hiç kimsenin bahsetmediği bir alanı (kapsam tipi değişkenleri) kapsamakta ve tüm kavramları kod ve bir GHCi oturumu ile göstermektedir. Her ikisini de en iyi şekilde seçebilseydim, yapardım. Ne yazık ki yapamam ve her iki yanıtı da yakından inceledikten sonra, yairchu'nun açıklayıcı kod ve ekli açıklama nedeniyle Norman'ın biraz dışına çıkmasına karar verdim. Bu biraz haksızlık, çünkü gerçekten forall
bunu bir tip imzayla gördüğümde beni zayıf bir korku hissi bırakmayan noktaya anlamak için her iki cevaba da ihtiyacım vardı .