[GUI] Are windows just ordinary widgets?
Axel Simon
A.Simon@ukc.ac.uk
Wed, 30 Apr 2003 11:54:52 +0100
On Tue, Apr 29, 2003 at 09:43:18AM +0100, Alastair Reid wrote:
>
> Wolfgang Thaller <wolfgang.thaller@gmx.net> writes:
> > The example implementation already had a "Widget" type; a Widget
> > type would be necessary when you want to have heterogenous lists of
> > widgets. That's why somebody brought up the idea of having the
> > toWidget and fromWidget functions; Nobody protested when the idea
> > was first proposed, so I assumed that it was agreed.
>
> By itself, there's no problem having a Widget type and to/fromWidget
> operations. After all, with _only_ those two operations, there's not
> that much you can do with them.
>
> But, the moment we add additional operations which act on objects of
> type Widget and not on objects in the Widget class, my gut tells me
> there will be problems. I was keeping quiet until such operations
> were proposed since it'd be easier to point out problems with concrete
> examples in front of us.
IMHO the classes should just reflect the object hierarchy. If we have e.g.
class Button b where...
class ToggleButton b where...
instance Button ToggleButton where...
then we can have the simple function
onActivate :: Button b => b -> IO () -> IO ()
and use it with ToggleButton as well (but not with a plain Widget or
anything on the other branches of the tree). Having onActivate as a class
member doesn't give any improvement in type safety, is less efficient
(bigger dictionaries) and doesn't lend itself to automatic creation of
this type hierarchy.
Axel.