
--- Axel Simon
- Callbacks get separate functions which called on<WidgetName><ActionName> I agree with this. Ok, no problem.
how About doOn<ActionName/>
newSomething requiredArgument [attribute := list]
For read-only attributes, you would most always want to read the value and nothing else.
h <- getHeight myButton I think it would be more systematic (and thus easier to learn) if we could use "get" here as well.
Seems easy enough, but it isn't. Lets assume we can use multiparameter type classes (which is a ghc extention of haskell). So we have: data Attr w a = Attr (w -> IO a) (w -> a -> IO ()) data AttrRO w a = AttrRO (w -> IO a) class Attr_Readable s w a where getter :: s -> (w -> IO a) instance Attr_Readable (Attr w a) w a where getter (Attr p _) = p instance Attr_Readable (AttrRO w a) w a where getter (AttrRO p) = p get :: Attr_Readable p w a => w -> p -> IO a get w readable = (getter readable) w now say we have something like: position :: Attr A_Button (Int,Int) position = newRWAttr (\w -> do a <- button_memfun_x (b2A w) b <- button_memfun_y (b2A w) return (a,b) ) (\w (a,b) -> button_memfun_position (b2A w) a b ) And then in our main do function, we see p <- get hello size But it doesn't work! I got this error: est_midlevel.hs:20: No instance for (Attributes.Attr_Readable (Attributes.Attr A_Button (Int, Int)) A_Button a) arising from use of `get' at Test_midlevel.hs:20 This is because the return value using those multiparameter classes is ambigious. So we are forcing the users to do something like get hello size :: IO (Int,Int) , which sucks. So I suggest using the getSize type RO accessors and simply inform the user. WO variables = constructor/member functions (for callbacks) RW variables = attributes RO variables = member functions David J. Sankel