Personal tools

PropLang

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
Current revision (21:21, 23 June 2007) (edit) (undo)
(Categorize)
 
(12 intermediate revisions not shown.)
Line 1: Line 1:
-
A design for a GUI library which is more like Haskell and less like C.
+
[[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.
Link: http://www.cse.unsw.edu.au/~chak/haskell/ports/
Link: http://www.cse.unsw.edu.au/~chak/haskell/ports/
Line 5: Line 6:
== Thoughts by ==
== Thoughts by ==
-
Neil Mitchell
+
Neil Mitchell, some patches from Joachim Breitner, discussions and help from Duncan Coutts
-
== The Var concept ==
+
For a darcs repo see: http://www.cs.york.ac.uk/fp/darcs/proplang/
-
This is the low level stuff, on which the library will be built
+
In particular check out Sample.hs, I am particularly proud of the word count:
-
data Var a = ...
+
sb!text =< with1 (txt!text) (\x ->
-
data Notify
+
"Word count: " ++ show (length $ words x))
-
get :: Var a -> IO a
+
== Overview ==
-
set :: Var a -> a -> IO ()
+
-
addNotify :: Var a -> IO () -> IO Notify
+
-
remNotify :: Notify -> IO ()
+
-
newVar :: a -> IO (Var a)
+
There are events, you can register to be notified when an event fires by doing
-
== Object layering ==
+
event += handler
-
textBox-text -< "test"
+
There are variables, which have events which fire, and a value which you can set and get.
-
filename <- newVar Nothing
+
-
notify filename hatCover
+
-
lbl-text =< with filename $ \x ->
+
-
case x of
+
-
Nothing -> "Select a file"
+
-
Just x -> "Loaded: " ++ x
+
 +
variable <- newVar "value"
 +
variable += handler
 +
variable -< "value"
 +
x <- getVal variable
-
where
+
There are objects, objects have properties. A property is just a variable.
-
(-) :: GtkObject -> GtkProp -> Var a -- ignoring lots of details here
+
window!text += handler
-
(-<) :: Var a -> a -> IO ()
+
window!text -< "Titlebar text"
-
(=<) :: Var a -> Action a -> IO ()
+
-
with :: Var a -> (a -> b) -> Action b
+
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.