Haskell'in tip sisteminin arkasındaki teoriyi anlamak için matematik gerekli miydi?


9

Son zamanlarda Haskell ile derinden ilgilenmeye başladım.

Genel olarak yeni kavramlar (örneğin forall anahtar kelimesi ve ST monad ) ve Haskell'in tip sistemini öğrenmeye çalışırken , sürekli olarak kategori teorisi ve lambda hesabından kavramlarla karşılaşıyorum . Merak ediyorum:

  1. Haskell'in tip sisteminin güçlü bir şekilde anlaşılması için başka hangi matematik dalları önemlidir?

  2. Bu matematikle ilgili titiz bir çalışmadan vazgeçebilir ve bunun yerine belirli ilgili kavramlara odaklanabilir miyim? (örn. lambda hesabındaki niceleyiciler.) Öyleyse, hangi kavramlar gereklidir?

Türleri ve Programlama Dillerini yakında almayı umuyorum , ancak lütfen uygun hissettiğiniz alternatif okuma kaynaklarını önerin.


4
Kategori teorisi, Haskell'i bilmek ve onunla çalışmak için gerekli değildir, ancak bazı temel kavramlara yardımcı olabilir. Matematiğin bu şeyleri anlaması için tek gerçek dalı Kategori Teorisi şeyleridir, sadece orada değil, aynı zamanda diğer matematiklere çok az bağımlılık bulacaksınız, bu şekilde çok izole bir alandır. Lambda hesabını alın ve farklı lambda değişkenleriyle ilişkili farklı tip sistemlerini inceleyin ve bunun dışında bu SO cevabını okuyun ve kategori teorisi hakkında okuyun.
Jimmy Hoffa

3
Altta yatan yazı sistemi konusunda uzmanlaşmak istemezdim. En azından her şeyi bilmemenizin birkaç projeyi tamamlamanızı engellemesine izin vermeyin. Haskell'de birkaç basit projeyi tamamlamak, arkasındaki matematiksel güzelliği görmeme izin verdi ve onu anlamaya yöneltti.
ChaosPandion

2
@ChaosPandion Bu bakış açısına katılıyorum, ancak monad'da kod yazmayı gerektirebilecek bir proje üzerinde çalışıyorum ST. Tüm ilgili tip imzalarını anlamadığımda derleyecek kod yazmak zor, bu yüzden tip sistemi anlayışımı geliştirmenin ihtiyatlı olacağını hissettim.
Rob

3
@robjb - Daha derin bir anlayışın sağduyulu olduğuna kesinlikle katılıyorum. Dürüst olmak gerekirse, yorumum daha çok Haskell'i denemek için çok korkutucu bulabilecek genel kitleye yönelikti.
ChaosPandion

Yanıtlar:


11

Hayır, Haskell'i anlamak için kategori teorisi hakkında bir kitap almanıza gerek yok.

Haskell'i birkaç yıldır kullanıyorum ve bir kategori teorisini meraktan aldım, gerçekten gerekli değil. Bir yandan, tüm bu soyutlamaların "büyük resim" e nasıl uyduğunu görmek güzel, ama gitmedim "Aman Tanrım, bunu Maybekategoriden bir profesör yapmalıyım []ve sonra kaydedebilirim prenses!".

Şimdi Haskell türü teorisi ile ne yaptığınıza bağlı olarak çitin üzerinde.

Sadece haskell öğreniyorsanız , tip sisteminin her nüansını anlamaya çalışmayın . Lütfen, önce C ++ şablon meta programlamasını öğrenmeye çalışmak gibi. Süslü tipler mükemmel araçlardır, ancak fonksiyonel programlama hakkında iyi bir anlayışa sahip olmak, imkansız polimorfizmi anlamaktan geçer.

Şimdi bir ya da iki yıl Haskell'den sonra, Haskell'in tip sisteminin nasıl çalıştığının her ince parçasını anlamak istediğinizi varsayalım, o zaman evet, bir tür teori yararlı olabilir.

İşlerin nasıl çalıştığının arkasındaki mantığın bazılarını anlamanıza yardımcı olacak, ayrıca açıkçası bakmaya değer bilgisayar bilimi IMO'sunun gerçekten harika bir dalı. İlgilendiğiniz parçaları kiraz olarak seçebilir ve yine de iyi bir miktar öğrenebilirsiniz.

Haskell için, STLC, HM tipi sistemlere (Sistem F) ve belki lambda küpüne (Haskell Sistem Fw iirc'dir) ve iso-özyinelemeli tiplere bakmak. Türler ve Programlama dilleri, başlamak için harika bir kaynaktır ve bunların hepsini ve daha fazlasını kapsar.

Eğer gerçekten yardım almak ve tomurcuklanan bir teorisyen olduğunuzu keşfetmek istiyorsanız, Agda veya Coq'ta dürtmeye gidin. Bunlar lambda küpünde Haskell'den bir adım ötede "bağımlı tipler" özelliğine sahiptir. Bağımlı türler, türlerin terimlere bağlı olmasına izin verir . Bu, türlerin teoremleri gerçekten kanıtlayacak kadar güçlü olduğu anlamına gelir. Meraklı, googling "köri howard izomorfizm" için bazı ilginç sonuçlar getirmelidir.


Agda ve Coq'un kısa bir açıklaması faydalı olacaktır.
ChaosPandion

@ChaosPandion Güncellendi
Daniel Gratzer

İyi görünüyor. Sadece isimlerin birçok insanın ilgisini çekmeye yetmeyeceğini söylemiştim.
ChaosPandion
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.