Vorlesung: Praxis der Funktionalen Programmierung | Index

Grafische Interfaces

Wenn nur Programme gegeneinander spielen, reicht es ja, wenn wir das Ergebnis irgendwie ausdrucken. Wenn wir aber selbst gegen ein Programm spielen, möchten wir ständig sehen, was los ist, und unseren Zug komfortable eingeben.

Das ist die Motiviation zur Betrachtung des GUI-Toolkits FranTk (Fran = Functional Reactive Animation, Tk - von Tcl/Tk).

Es gibt noch andere solche GUI-Libraries für Haskell, siehe diese Liste, total angesagt ist wahrscheinlich GTk+, aber ich habe FranTk gewählt, weil es a) unter hugs und ghc und b) unter UnixL/linux, aber auch Win* läuft.

Components

In Tcl/Tk baut man Widgets in Fenster. In FranTk denken wir so: wir basteln Komponenten, das sind Aktionen (denken wir an die IO-Monade), die Widgets herstellen:
type Component = GUI Widget
Im einfachsten Fall sieht das so aus:

hier war mkLabel [...] :: Component

Zustände und Verhalten

Wenn wir Anzeigen auch ändern wollen, denken wir so: wir deklarieren eine Variable, und benutzen ihr Verhalten, d. h. den jeweils deren aktuellen Wert. Wir können ihn durch Aktionen verändern. Siehe mkBVar hier:

Ereignisse und Hörer

Ein Ereignis is zum Beispiel, daß der User mir der Maus auf einen Knopf clickt. Im allgemeinen tritt ein Ereignis nicht nur einfach auf, sondern es führt auch einen Wert mit sich.

Wir definieren Hörer, die auf Ereignisse warten, und wenn sie eintreffen, mir dem ankommenden Wert eine Aktion ausführen, zum Beispiel den Wert einer Variablen setzen. Siehe obiges Beispiel.

Wir können recht kunstvoll mit Hörern rechnen, zum Beispiel Ereignisse verteilen (mergeL, anyL), transformieren (mapL) und filtern (filterL, justL).

Dynamische Komponenten

Wir möchten Komponenten (Widgets), die ihr Aussehen mit der Zeit ändern,, also von Ereignissen abhängen. Dazu haben wir ifB

Anwendung beim Grafik-Spielfeld

Das ist zunächst nur für zwei Spieler, die abwechselnd clicken. Zum Aufrufen eines externen Spielprogramms muß man sich noch überlegen, wie man dem bescheidsagt, und dann dem Schiedsrichter, daß es fertig ist. (Nächste Woche. Dann geht es sowieso um (Echt-)Zeit, wegen der Musik.) Quelltext hier

best viewed with any browser


http://www.informatik.uni-leipzig.de/~joe/ mailto:joe@informatik.uni-leipzig.de