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) |