PropLang
From HaskellWiki
(Categorize) |
|||
| (6 intermediate revisions not shown.) | |||
| Line 1: | Line 1: | ||
| + | [[Category:User interfaces]] [[Category:Proposals]] [[Category:Libraries]] | ||
A design for a GUI library which is more like Haskell and less like C. To be written over Gtk2Hs. | A design for a GUI library which is more like Haskell and less like C. To be written over Gtk2Hs. | ||
| Line 5: | Line 6: | ||
== Thoughts by == | == Thoughts by == | ||
| - | Neil Mitchell, Duncan Coutts | + | Neil Mitchell, some patches from Joachim Breitner, discussions and help from Duncan Coutts |
| - | + | For a darcs repo see: http://www.cs.york.ac.uk/fp/darcs/proplang/ | |
| - | + | In particular check out Sample.hs, I am particularly proud of the word count: | |
| - | + | sb!text =< with1 (txt!text) (\x -> | |
| - | + | "Word count: " ++ show (length $ words x)) | |
| - | + | == Overview == | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | There are events, you can register to be notified when an event fires by doing | |
| - | = | + | event += handler |
| - | + | There are variables, which have events which fire, and a value which you can set and get. | |
| - | + | variable <- newVar "value" | |
| - | + | variable += handler | |
| - | + | variable -< "value" | |
| - | + | x <- getVal variable | |
| - | + | There are objects, objects have properties. A property is just a variable. | |
| - | + | window!text += handler | |
| - | + | window!text -< "Titlebar text" | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | There are bindings which relate variables. | |
| - | + | ||
| - | + | -- the window text is the variable | |
| - | + | window!text =<= variable | |
| - | + | -- the window text is the variable, but upppercase | |
| - | + | window!text =< with1 variable (map toUpper) | |
| + | -- combine the two texts to create the window text | ||
| + | window!text =< with2 variable1 variable2 (++) | ||
| - | + | If any of the values on the RHS of a binding change, then the LHS is updated. | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
Current revision
A design for a GUI library which is more like Haskell and less like C. To be written over Gtk2Hs.
Link: http://www.cse.unsw.edu.au/~chak/haskell/ports/
1 Thoughts by
Neil Mitchell, some patches from Joachim Breitner, discussions and help from Duncan Coutts
For a darcs repo see: http://www.cs.york.ac.uk/fp/darcs/proplang/
In particular check out Sample.hs, I am particularly proud of the word count:
sb!text =< with1 (txt!text) (\x ->
"Word count: " ++ show (length $ words x))
2 Overview
There are events, you can register to be notified when an event fires by doing
event += handler
There are variables, which have events which fire, and a value which you can set and get.
variable <- newVar "value" variable += handler variable -< "value" x <- getVal variable
There are objects, objects have properties. A property is just a variable.
window!text += handler window!text -< "Titlebar text"
There are bindings which relate variables.
-- the window text is the variable window!text =<= variable -- the window text is the variable, but upppercase window!text =< with1 variable (map toUpper) -- combine the two texts to create the window text window!text =< with2 variable1 variable2 (++)
If any of the values on the RHS of a binding change, then the LHS is updated.
