PropLang: Difference between revisions
NeilMitchell (talk | contribs) No edit summary |
NeilMitchell (talk | contribs) |
||
Line 25: | Line 25: | ||
textBox-text -< "test" | textBox-text -< "test" | ||
filename <- newVar Nothing | filename <- newVar Nothing | ||
addNotify filename hatCover | |||
lbl-text =< with filename $ \x -> | lbl-text =< with filename $ \x -> | ||
case x of | case x of |
Revision as of 00:30, 18 July 2006
A design for a GUI library which is more like Haskell and less like C.
Link: http://www.cse.unsw.edu.au/~chak/haskell/ports/
Thoughts by
Neil Mitchell
The Var concept
This is the low level stuff, on which the library will be built
data Var a = ... data Notify
get :: Var a -> IO a set :: Var a -> a -> IO () addNotify :: Var a -> IO () -> IO Notify remNotify :: Notify -> IO ()
newVar :: a -> IO (Var a)
Object layering
textBox-text -< "test" filename <- newVar Nothing addNotify filename hatCover lbl-text =< with filename $ \x -> case x of Nothing -> "Select a file" Just x -> "Loaded: " ++ x
where
(-) :: GtkObject -> GtkProp -> Var a -- ignoring lots of details here (-<) :: Var a -> a -> IO () (=<) :: Var a -> Action a -> IO ()
with :: Var a -> (a -> b) -> Action b