Abstrakte Datentypen und das Typsystem von Haskell

... [Seminar "Funktionale Programmierung"] ... [Inhaltsübersicht] ... [Typen in Haskell] ...
1. Einführung

1.1. Vorwort

Dieses Dokument soll eine Einführung in das Haskell-Typsystem, sowie des Erstellens und Verwendens von "Abstrakten Datentypen" geben. Themen, die in späteren Seminaren behandelt wurden und meinen Themenbereich auch mit abdecken, wie zum Beispiel "Monads", sind ausgelassen worden. Den einzelnen Ausführungen werden Beispiele nachgestellt, welche das Verständnis vertiefen sollen.


1.2. Warum Typen?

Typen dienen in erster Linie dazu, ein Programm schon zur Übersetzungszeit zu verifizieren. Mit Hilfe des Typsystems können Aussagen über das Laufzeitverhalten schon zur Übersetzungszeit getroffen werden. Ein Compiler oder Interpreter überprüft dabei die Korrektheit eines Programms nicht nur an den syntaktischen Regeln, wie sie in einer kontextfreien Grammatik vorgegeben sind, sondern auch anhand der Korrektheit der verwendeten Typen. Somit können Fehler, wie zum Beispiel das vertauschen von zwei Parametern in einem Funktionsaufruf, frühzeitig ermittelt werden.

Allerdings lassen sich nicht alle Fehler abfangen. Bei Typsystemen mit dynamischer Typüberprüfung, wie zum Beispiel Java, läßt sich das Laufzeitverhalten zur Übersetzungszeit nicht eindeutig voraussagen, da die Bindungen erst während der Laufzeit feststehen. Die Typkorrektheit läßt sich also nicht bei der Übersetzung verifizieren. Zur Laufzeit kann es so zu störenden Typfehlern kommen. Bei rein statischen Typsystemen ist die Typsicherheit gewährleistet, da die Bindungen schon zur Übersetzungszeit feststehen. Dynamische Typsysteme bieten allerdings den Vorteil einer höheren Flexibilität. Es lassen sich also statische und dynamische Typsysteme unterscheiden.

Durch das Verwenden von Typen ist auch eine höhere Effizienz der Programme auszumachen. So kann durch Typinformationen auf einen Teil der dynamischen Typüberprüfung zur Laufzeit verzichtet werden. Bei einem rein statischem Typsystem sind dynamische Typüberprüfungen sogar komplett überflüssig.

Ein weiterer Vorteil von Typen ist, dass sie die Dokumentation des Quelltextes unterstützen, da sie das Lesen und Verstehen von Programmen vereinfachen.

1.3. Hindley-Milner Typsystem

Haskell selbst basiert auf dem Hindley-Milner Typsystem, welches auch die Grundlage einiger anderer Programmiersprachen ist, wie zum Beispiel "ML" oder "Miranda". Dieses Typsystem ist ein rein statisches Typsystem. Die herausragensde Eigenschaft ist, dass es komplett auf Typannotationen verzichten kann. Die Typen können bei der Übersetzung selbstständig durch Typinferenz ermitteln werden. Das bedeutet, der Übersetzer kann den jeweiligen Typ selbst aus dem Kontext des Programms konstruieren. Genauer beschrieben wird dies in Kapitel 6: Typinferenz. Das Hindley-Milner Typsystem unterstützt Polymorphie, allerdings nur eine parametrische Polymorphie. Damit Haskell auch eine ad-hoc Polymorphie unterstützt, wurde es entsprechend erweitert. Näheres dazu gibt es in Kapitel 3: Polymorphie.



... [Seminar "Funktionale Programmierung"] ... [Inhaltsübersicht] ... [Typen in Haskell] ...