packages feed

reactive-banana-wx-0.1.0.0: src/Counter.hs

{-----------------------------------------------------------------------------
    reactive-banan-wx
    
    Example: Counter
------------------------------------------------------------------------------}
module Counter where

import Reactive
import Reactive.WX
import Graphics.UI.WX hiding (Event)

{-----------------------------------------------------------------------------
    Main
------------------------------------------------------------------------------}
main = start $ do
    f       <- frame [text := "Counter"]
    bup     <- button f [text := "Up"]
    bdown   <- button f [text := "Down"]
    output  <- staticText f []
        
    set f [layout := margin 10 $
            column 5 [widget bup, widget bdown, widget output]]
    
    let
        eup, edown :: Event ()
        eup   = event0 bup   command
        edown = event0 bdown command
        
        counter :: Behavior Int
        counter = accumulate ($) 0 $
            ((+1) <$ eup) `union` (subtract 1 <$ edown)
    
    sink output [text :== (show <$> counter)]