Matematyka potrzebna była do zrozumienia teorii stojącej za systemem typów Haskella?

9

Ostatnio bardzo się zainteresowałem Haskellem.

Próbując nauczyć się nowych pojęć (np . Słowo kluczowe forall i monada ST ) i ogólnie systemu typów Haskella, ciągle napotykam pojęcia z teorii kategorii i rachunku lambda . Zastanawiam się więc:

  1. Jakie inne gałęzie matematyki są ważne dla silnego zrozumienia systemu typów Haskella?

  2. Czy mogę zrezygnować z rygorystycznego studiowania tych matematyki i zamiast tego skupić się na niektórych istotnych pojęciach? (np. kwantyfikatory w rachunku lambda.) Jeśli tak, jakie pojęcia są niezbędne?

Mam nadzieję, że wkrótce wybiorę typy i języki programowania , jednak proszę o zasugerowanie alternatywnych zasobów do czytania, które uznają Państwo za stosowne.

Obrabować
źródło
4
Teoria kategorii nie jest niezbędna do poznania i pracy z Haskellem, ale może pomóc w niektórych podstawowych koncepcjach. Jedyną prawdziwą gałęzią matematyki, z której można zrozumieć te rzeczy, jest teoria kategorii, która nie tylko jest tam zakorzeniona, ale nie ma w tym zależności od innych matematyki, jest to bardzo odizolowany obszar w ten sposób. Podnieś rachunek Lambda i przestudiuj różne systemy typów związane z różnymi wariantami lambda, a poza tym przeczytaj tę odpowiedź SO i przeczytaj o teorii kategorii.
Jimmy Hoffa
3
Nie dałbym się tak pochwycić opanowaniem podstawowego systemu typów. Przynajmniej nie pozwól, że nie wiedząc, że wszystko powstrzymuje cię od ukończenia kilku projektów. Samo ukończenie kilku prostych projektów w Haskell pozwoliło mi dostrzec matematyczną urodę i sprawiło, że zrozumiałem.
ChaosPandion
2
@ChaosPandion Zgadzam się z tym punktem widzenia, ale pracowałem nad projektem, który może wymagać napisania kodu w STmonadzie. Trudno jest napisać kod, który skompiluje się, gdy nie zrozumiem wszystkich odpowiednich podpisów typów, więc czułem, że poprawienie mojego zrozumienia systemu typów byłoby rozsądne.
Rob
3
@robjb - Z pewnością zgadzam się z tobą, że głębsze zrozumienie jest rozważne. Szczerze mówiąc, mój komentarz był skierowany bardziej do ogólnej publiczności, która może uznać, że Haskell jest zbyt onieśmielający, aby nawet spróbować.
ChaosPandion

Odpowiedzi:

11

Nie, nie musisz wybierać książki na temat teorii kategorii, aby zrozumieć Haskella.

Używam Haskell od kilku lat i z ciekawości wybrałem teorię kategorii, to naprawdę nie jest konieczne. Z jednej strony fajnie jest zobaczyć, jak te wszystkie abstrakcje pasują do „dużego obrazu”, ale nie poszedłem „O rany, muszę tylko uczynić z tego profesora z Maybekategorii do []s, a potem mogę zapisać księżniczka!".

Teraz w zależności od tego, co robisz z teorią typu Haskell, jest na ogrodzeniu.

Jeśli dopiero się uczysz , nie próbuj zrozumieć każdego niuansu systemu typów . Proszę nie, to tak, jakby najpierw nauczyć się meta-programowania szablonów C ++. Fantazyjne typy są doskonałymi narzędziami, ale dobre zrozumienie programowania funkcjonalnego przewyższa zrozumienie impredykatywnego polimorfizmu.

Powiedzmy teraz, że po roku lub dwóch Haskell chcesz zrozumieć każdy subtelny element tego, jak działa system typów Haskell, to tak, niektóre teorie typów mogą być pomocne.

Pomoże ci zrozumieć część logiki stojącej za tym, jak to działa, a ponadto jest to naprawdę fajna gałąź informatyki IMO, na którą warto spojrzeć. Możesz wybrać części, które Cię interesują, i nadal nauczyć się przyzwoitej kwoty.

Dla Haskella, patrząc na STLC, systemy typu HM (System F) i być może kostkę lambda (Haskell to System Fw iirc) i typy izo-rekurencyjne. Typy i języki programowania to świetne źródło informacji na początek i obejmuje wszystkie te i wiele więcej.

Jeśli naprawdę chcesz wypić fajną pomoc i odkryć, że jesteś początkującym teoretykiem, idź na Agdę lub Coq. Obejmują one „typy zależne”, o krok dalej w sześcianie lambda niż Haskell. Typy zależne pozwalają typom zależeć od warunków. Oznacza to, że typy są wystarczająco potężne, aby faktycznie udowodnić twierdzenia. Dla ciekawskich, googlujących się w „izomorfizmie curry Howarda” powinno przynieść interesujące wyniki.

Daniel Gratzer
źródło
Przydałby się krótki opis Agdy i Coqa.
ChaosPandion
@ChaosPandion Zaktualizowano
Daniel Gratzer
To wydaje się dobre. Pomyślałem, że samo powiedzenie imion nie wystarczy, by wzbudzić zainteresowanie wielu ludzi.
ChaosPandion