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:
Jakie inne gałęzie matematyki są ważne dla silnego zrozumienia systemu typów Haskella?
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.
ST
monadzie. 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.Odpowiedzi:
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
Maybe
kategorii 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.
źródło