Eine ähnliche Verallgemeinerung wie beim Umgangs mit Objekten gibt es auch
für Werte, die die verschiedenen Konfigurationsoptionen der Tk-Objekte
annehmen können. Hierzu gibt es zunächst wieder einen Typen, durch
den alle Werte dieser Art intern dargestellt werden. Dies ist der Typ
GUIVALUE:
data Generator = HaskellTk | Tk data GUIVALUE = GUIVALUE Generator StringEntsprechend gibt es auch wieder eine Klasse
GUIValue, die im
wesentlichen zum Wandeln in die interne Repräsentation und Angabe von
default-Werten dient. Der Typ eines Konfigurationswertes muß also immer
eine Instanz der Klasse GUIValue sein:
class (Show a, Read a) => GUIValue a where
cdefault :: a -- default-Wert
toGUIValue :: a -> GUIVALUE -- wandeln in GUIVALUE
-- für gängige Falle vordefiniert
maybeGUIValue :: GUIVALUE -> (Maybe a) -- intern, vordefiniert
fromGUIValue :: GUIVALUE -> a -- intern, vordefiniert
Der Typ Generator ist hier eigentlich uninteressant. Er wird nur
intern bei der Rückgabe von Tk-Werten, die ja immer als Strings von der
Wish gelesen werden, benutzt. Bei der Implementierung der Methode
toGUIValue in der GUIVALUE-Instanz wird man also immer
HaskellTk als Generator angeben. Das zweite Feld des
GUIVALUE-Konstruktors muß die Tk-Repräsentation des entsprechenden
Wertes als String, genau so wie dieser auf die Wish ausgegeben werden
soll, enthalten. Diese Repräsentation sollte die Show-Instanz, die
von der GUIValue-Instanz vorausgesetzt wird liefern (falls dies aus
irgendwelchen Gründen einmal anders ist, reicht es allerdings, die
toGUIObject-Methode entsprechend zu implementieren). Umgekehrt
muß die ebenfalls vorausgesetzte Read-Instanz die
Tcl-Repräsentation in den zugehörigen HTk-Wert wandeln.
Die toGUIValue Methode muß man allerdings in der Regel nicht
überschreiben. Sie benutzt sonst einfach die vorausgesetzte Show-
Instanz und liefert einen entsprechenden GUIVALUE mit
HaskellTk als Generator. Zu beachten ist dabei allerdings,
daß gewisse Zeichen durch entsprechende Escape-Sequenzen ersetzt werden
und die Zeichenkette in Anführungszeichen gesetzt wird, damit keine
Probleme mit enthaltenen Leerzeichen auftreten. Normalerweise ist
dies so gewollt, kann aber in bestimmten Situation auch unerwünscht sein,
so daß dann die toGUIValue-Methode überschrieben werden muß.
Die cdefault-Methode liefert schließlich einen default-Wert für
diesen Typen. Normalerweise stehen hier die Tcl-Defaults. Soll ein
default-Wert abweichend davon gelten, muß dieser bei der Erzeugung mit
gesetzt werden (dazu siehe Objekt-Methoden
createCmd).