|
Übersicht: Einleitung
Worum geht es?
Verallgemeinte Algebraische Datentypen (kurz GADTs[1], auch
Generalisierte Algebraische Datentypen) versuchen einige Schwächen
des Haskell-Typsystem auszuräumen.
Dies geschieht durch eine Erweiterung des Typsystems, bezogen auf
Algebraische Datentypen.
Diese Seminararbeit gibt einen Einblick, welche Erweiterungen
GADTs bieten und wie man diese sinnvoll anwendet. Sie richtet
sich an Leser, die grundlegende Haskell-Kenntnisse haben.
Vorwort
GADTs bieten nicht viele Neuerungen; allerdings sind die
dahintersteckenden Ideen nicht auf Anhieb verständlich. Daher
wird in dieser Seminararbeit relativ viel mit verschiedenen
Beispielen demonstriert, was für Auswirkungen der Einsatz von
GADTs hat. Die Beispiele sollen zeigen, wann GATDs sinnvoll
einsetzbar sind und wann nicht.
Ziele
Die Ziele einer statisch typisierten Hochsprache wie Haskell
sind im Wesentlichen, die Menge der sinnlosen, vom Compiler
akzeptierten Programme einzuschränken, und die Menge der
sinnvollen, vom Compiler nicht akzeptierten Programme ebenfalls
einzuschränken.
In vielen Fällen funktioniert dies schon sehr gut. Es gibt
jedoch immer noch Datentypen, dessen Invariante erst zur
Laufzeit überprüft werden kann. Die Invariante muss zudem auch
vom Entwickler manuell aufgerufen werden, um effektiv zu sein.
Mit dem Konzept der GADTs ist es möglich, für bestimmte
Datenstrukturen die Invariante durchs Typsystem überprüfen zu
lassen.
Dies hat den Vorteil, dass es dann nicht mehr möglich ist,
sinnlose Werte zu konstruieren. Zudem sind Invarianten
wesentlich kürzer formulierbar.
Ein weiterer Vorteil von GADTs ist es, dass bestimmte partiell
definierte Funktionen nun total definiert werden können. Des
Weiteren können wir für bestimmte Funktionen exaktere Typen
definieren.
- Die Worte GADT sowie ADT
sind Abkürzungen. Umgangssprachlich werden die Plurale (sowie
Genitive) von Abkürzungen durch Anhängen eines "s"
gebildet. Dies ist zwar nicht korrekt, wird aber in dieser
Arbeit so verwendet, um zum Einen eine Unterscheidung zwischen
Singular und Plural bzw. Genitiv und restlichen Kasus zu
ermöglichen, und zum Anderen näher an der meist verwendeten
Aussprache zu bleiben.
|