import Graphics.UI.WX import System.Random main :: IO () main = start $ do frm <- frame [text := "Interact"] fld <- textEntry frm [text := "0", on keyboard := checkKeys] inc <- button frm [text := "increment", on command := increment fld] ran <- button frm [text := "random", on command := (randReplace fld frm)] set frm [layout := margin 5 $ floatCentre $ column 2 [centre $ widget fld, row 2 [widget inc, widget ran]]] increment :: Textual w => w -> IO () increment field = do val <- get field text when ((not . null) val) $ set field [text := show $ 1 + read val] checkKeys :: EventKey -> IO () checkKeys (EventKey key _ _) = when (elem (show key) $ "Backspace" : map show [0..9]) propagateEvent randReplace :: Textual w => w -> Window a -> IO () randReplace field frame = do answer <- confirmDialog frame "Random" "Generate a random number?" True when answer $ getStdRandom (randomR (1,100)) >>= \num -> set field [text := show (num :: Int)]