|
From: <dl...@us...> - 2003-01-30 23:50:02
|
Update of /cvsroot/htoolkit/gio/src/examples/simple
In directory sc8-pr-cvs1:/tmp/cvs-serv29218/src/examples/simple
Added Files:
Calculator.hs
Log Message:
The infamous calculator example
--- NEW FILE: Calculator.hs ---
module Main where
import Char( isDigit, digitToInt )
import Graphics.UI.GIO
main
= start calculator
calculator
= do varst <- newVar (0,id)
w <- window [title =: "calculator", resizeable =: False]
display <- label [text =: "0"] w
keys <- mapM (\c -> button [text =: [c], on command =: cmd varst display c] w) "123+456-789*C0=/"
set w [layout =: (pad 10 (hglue <<< display)) ^^^ grid (matrix 4 (map (hfix 40) keys))]
where
matrix n [] = []
matrix n xs = take n xs : matrix n (drop n xs)
cmd varst display c
= do st <- getVar varst
let st' = calc st c
set display [text =: show (fst st')]
setVar varst st'
calc (d,accu) c
= case c of
'C' -> (0,id)
'=' -> (accu d,const (accu d))
'+' -> (0, (d+))
'-' -> (0, (d-))
'*' -> (0, (d*))
'/' -> (0, (\x -> if x==0 then 0 else div d x))
_ | isDigit c -> (10*d + digitToInt c,accu)
| otherwise -> (0,id)
|