Mathematik musste die Theorie hinter Haskells Typensystem verstehen?

9

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:

  1. Welche anderen Zweige der Mathematik sind wichtig für ein tiefes Verständnis des Haskellschen Typensystems?

  2. 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.

rauben
quelle
4
Das kategorietheoretische Zeug ist nicht wesentlich, um Haskell zu kennen und mit ihm zu arbeiten, aber es kann bei einigen grundlegenden Konzepten helfen. Der einzige wirkliche Zweig der Mathematik, aus dem man dieses Zeug verstehen kann, ist das der Kategorietheorie. Es ist nicht nur dort verwurzelt, sondern darin gibt es wenig Abhängigkeit von anderen Mathematikern, es ist auf diese Weise ein sehr isolierter Bereich. Nehmen Sie den Lambda-Kalkül auf und studieren Sie die verschiedenen Typsysteme, die mit verschiedenen Lambda-Varianten assoziiert sind. Lesen Sie diese SO-Antwort und lesen Sie mehr über die Kategorietheorie.
Jimmy Hoffa
3
Ich würde mich nicht so sehr mit der Beherrschung des zugrunde liegenden Typsystems beschäftigen. Lassen Sie sich zumindest nicht davon abhalten, ein paar Projekte abzuschließen, wenn Sie nicht alles wissen. Nur ein paar einfache Projekte in Haskell abzuschließen, hat es mir ermöglicht, die mathematische Schönheit dahinter zu erkennen und mich dazu zu bewegen, sie zu verstehen.
ChaosPandion
2
@ChaosPandion Ich stimme diesem Standpunkt zu, habe aber an einem Projekt gearbeitet, für das möglicherweise Code in die STMonade 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.
Rob
3
@robjb - Ich stimme Ihnen mit Sicherheit zu, dass ein tieferes Verständnis umsichtig ist. Ehrlich gesagt richtete sich mein Kommentar eher an das allgemeine Publikum, das Haskell möglicherweise zu einschüchternd findet, um es überhaupt zu versuchen.
ChaosPandion

Antworten:

11

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 MaybeKategorie 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.

Daniel Gratzer
quelle
Eine kurze Beschreibung von Agda und Coq wäre nützlich.
ChaosPandion
@ChaosPandion Aktualisiert
Daniel Gratzer
Das scheint gut zu sein. Ich dachte, nur die Namen zu sagen, würde nicht ausreichen, um die Interessen vieler Menschen zu wecken.
ChaosPandion