Monadisches I/O



next up previous
Next: Überladen in Gofer Up: Ein- und Ausgabe Previous: Continuations

Monadisches I/O

Aus den Problemen, die viele Programmierer mit Dialogen hatten, wurde das monadische I/O-Konzept entwickelt. [PJW93] Es basiert auf eine Programmiermethode, die in geschickter Weise Daten implizit weiterreicht, den Monaden. [Wad92][Wad90] Eine Sequentialisierung kann in rein funktionalen Sprachen nur durch Funktionakomposition adequat erreicht werden. Haben wir zwei I/O Funktionen und , die nacheinander ausgeführt werden sollen, so ist dieses am einfachsten zu erreichen, wenn einen Wert hat den als Eingabeargument zur Evaluierung benötigt. Wenn dieser Wert von dann in irgendeiner Weise noch die Umgebung (Filesystem etc) darstellt, dann ist auch die referentielle Transparenz gewährleistet.
Diesem Gedanken liegt das monadische I/O zugrunde. Monaden stellen zwei Operatoren zur Verfügung: bind ein Sequenzoperator, der durch Komposition realisiert wird, und unit einen Operator, der es erlaubt komplexe Datentypen in eine Monade zusammenzupacken, die dann implizit weitergereicht werden. Es kann also gut die für I/O benötigte Umgebung (die World) in einer Monade enthalten sein und weitergereicht werden.
Betrachten wir die beiden Aspekte des monadischen I/O getrennt:

Die monadischen I/O-Funktionen sind im derzeitigen Haskell-Standard noch nicht eingebaut. Die meisten Haskell-Implementierungen bieten monadisches I/O mitlerweile an. Monadisches I/O wird sicherlich in Haskell 1.3 aufgenommen. Eine Vorabvorschlag hierzu ist schon auf dem WWW erhältlich. (Adresse siehe weiter oben)



next up previous
Next: Überladen in Gofer Up: Ein- und Ausgabe Previous: Continuations



Sven Eric Panitz
Mi., 01. Nov. 1995, 12:17:13