Vor kurzem habe ich mich sehr für Haskell interessiert.
Während ich versuche, neue Konzepte (z. B. das Schlüsselwort forall und die ST-Monade ) und das Typensystem von Haskell im Allgemeinen zu lernen, stoße ich ständig auf Konzepte aus der Kategorietheorie und der Lambda-Rechnung . Also frage ich mich:
Welche anderen Zweige der Mathematik sind wichtig für ein tiefes Verständnis des Haskellschen Typensystems?
Kann ich auf ein gründliches Studium dieser Mathematik verzichten und mich stattdessen auf bestimmte relevante Konzepte konzentrieren? (zB Quantifizierer in der Lambda-Rechnung.) Wenn ja, welche Konzepte sind wesentlich?
Ich hoffe, dass ich bald Typen und Programmiersprachen lernen kann. Bitte schlagen Sie jedoch alternative Lesemöglichkeiten vor, die Sie für angemessen halten.
ST
Monade geschrieben werden muss. Es ist schwierig, Code zu schreiben, der kompiliert wird, wenn ich nicht alle relevanten Typensignaturen verstehe. Daher hielt ich es für ratsam, mein Verständnis des Typsystems zu verbessern.Antworten:
Nein, Sie müssen kein Buch über Kategorietheorie in die Hand nehmen, um Haskell zu verstehen.
Ich benutze Haskell seit ein paar Jahren und habe aus Neugier eine Kategorietheorie aufgegriffen, die wirklich nicht notwendig ist. Einerseits ist es cool zu sehen, wie all diese Abstraktionen in das "große Ganze" passen, aber ich habe nicht gesagt: "Oh mein Gott, ich muss dies nur zu einem Profunktor aus der
Maybe
Kategorie bis[]
s machen, und dann kann ich das speichern." Prinzessin!".Je nachdem, was Sie mit der Haskell-Typentheorie machen, steht sie nun auf dem Zaun.
Wenn Sie nur Haskell lernen, versuchen Sie nicht, jede Nuance des Typsystems zu verstehen . Bitte nicht, es ist wie der Versuch, zuerst die Metaprogrammierung von C ++ - Vorlagen zu lernen. Ausgefallene Typen sind ausgezeichnete Werkzeuge, aber ein gutes Verständnis der funktionalen Programmierung ist besser als ein Verständnis des improvisierten Polymorphismus.
Nehmen wir nun an, nach ein oder zwei Jahren von Haskell möchten Sie jedes subtile Stück der Funktionsweise von Haskells Typensystem verstehen. Dann könnte eine Typentheorie hilfreich sein.
Es wird Ihnen helfen, einige der Logik zu verstehen, die dahinter steckt, wie die Dinge funktionieren, und es ist ehrlich gesagt ein wirklich cooler Zweig der IMO der Informatik, der einen Blick wert ist. Sie können die Teile auswählen, an denen Sie interessiert sind, und trotzdem eine anständige Menge lernen.
Für Haskell mit Blick auf STLC, HM-Typ-Systeme (System F) und möglicherweise den Lambda-Würfel (Haskell ist System Fw iirc) und iso-rekursive Typen. Typen und Programmiersprachen sind eine großartige Ressource für den Einstieg und decken all diese und noch viel mehr ab.
Wenn Sie wirklich die Kühlhilfe trinken möchten und feststellen möchten, dass Sie ein angehender Theoretiker sind, stöbern Sie in Agda oder Coq. Diese weisen "abhängige Typen" auf, die im Lambda-Würfel einen Schritt weiter als Haskell sind. Abhängige Typen lassen Typen von Begriffen abhängen . Dies bedeutet, dass die Typen mächtig genug sind, um Theoreme tatsächlich zu beweisen. Für den neugierigen, googelnden "Curry Howard Isomorphismus" sollten einige interessante Ergebnisse hervorgebracht werden.
quelle