[GUI] Common GUI API : What would the code look like?
David Sankel
camio@yahoo.com
Thu, 6 Mar 2003 19:54:44 -0800 (PST)
--- Glynn Clements <glynn.clements@virgin.net> wrote:
> > > 3. Personally, I would prefer a generic widget
> > > creation function,
> > > rather than a different function for each type
> of
> > > widget. E.g. Xt has
> > > XtCreateWidget(), with the widget class being
> passed
> > > as an argument.
> > > A more Haskell-ish approach would be to use
> > > typeclasses, e.g.:
> > >
> > > class Widget a where
> > > create :: String -> a -> [Property] -> IO a
> > > -- create name parent properties = ...
>
> That should be:
>
> create :: (Widget b) => String -> b -> [Property]
> -> IO a
>
> A widget's parent must be a widget, but not
> necessarily the same type
> of widget.
>
Ahh, I thought you wanted to create widgets based on
the String parameter.
So in the following code, you would get an ambiguity
error, right?
do
-- mainWindow defined above
a <- create "Some_Button" mainWindow [ label :=
"Okay" ]
runGUI mainWindow -- or whatever it is.
The system does not know if a is a button, a label, or
whatever. It would have to look like this to remove
the ambiguity
do
-- mainWindow defined above
a <- create "Some_Button" mainWindow [ label :=
"Okay" ] :: Button
runGUI mainWindow -- or whatever it is.
It seems like this would defeat the purpose of having
a generic create function since Button needs to be in
there somewhere. Although, I do find your argument
very credible.
David J. Sankel