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
http://www.informatik.uni-leipzig.de/~joe/
mailto:joe@informatik.uni-leipzig.de