Attributes of an object can be get and set. Getting the value of an object's attribute is straingtforward. As an example consider a button widget and an attribute called buttonLabel.
value <- get button buttonLabel
The syntax for setting or updating an attribute is only slightly more complex. At the simplest level it is just:
set button [ buttonLabel := value ]
However as the list notation would indicate, you can set or update multiple attributes of the same object in one go:
set button [ buttonLabel := value, buttonFocusOnClick := False ]
You are not limited to setting the value of an attribute, you can also apply an update function to an attribute's value. That is the function receives the current value of the attribute and returns the new value.
set spinButton [ spinButtonValue :~ (+1) ]
There are other variants of these operators, (see AttrOp). ':=>' and ':~>' and like ':=' and ':~' but operate in the IO monad rather than being pure. There is also '::=' and '::~' which take the object as an extra parameter.
Attributes can be read only, write only or both read/write.
|type Attr o a = ReadWriteAttr o a a|
|An ordinary attribute. Most attributes have the same get and set types.|
|type ReadAttr o a = ReadWriteAttr o a ()|
|A read-only attribute.|
|type WriteAttr o b = ReadWriteAttr o () b|
|A write-only attribute.|
|data ReadWriteAttr o a b|
|Interface for getting, setting and updating attributes|
|data AttrOp o|
|get :: o -> ReadWriteAttr o a b -> IO a|
|Get an Attr of an object.|
|set :: o -> [AttrOp o] -> IO ()|
|Set a number of properties for some object.|
|Internal attribute constructors|
|newAttr :: (o -> IO a) -> (o -> b -> IO ()) -> ReadWriteAttr o a b|
|Create a new attribute with a getter and setter function.|
|readAttr :: (o -> IO a) -> ReadAttr o a|
|Create a new read-only attribute.|
|writeAttr :: (o -> b -> IO ()) -> WriteAttr o b|
|Create a new write-only attribute.|
|Produced by Haddock version 0.8|