Skip to content

Instantly share code, notes, and snippets.

@raimohanska
Created January 11, 2012 14:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save raimohanska/1594917 to your computer and use it in GitHub Desktop.
Save raimohanska/1594917 to your computer and use it in GitHub Desktop.
reactive-banana Events, Behaviors and Zipping with +
import Reactive.Banana
import Control.Concurrent
main = do
-- Create handles for pushing values into events
(addHandler1, push1) <- newAddHandler
(addHandler2, push2) <- newAddHandler
-- Create event network
network <- compile $ do
-- Actual events from AddHandlers
e1 <- fromAddHandler addHandler1
e2 <- fromAddHandler addHandler2
-- Behaviors from Events
let d1 = stepperD 0 e1 :: Discrete Int
let d2 = stepperD 0 e2 :: Discrete Int
-- Sum Behavior
let sumD = (+) <$> d1 <*> d2
-- Back to Event
let sumE = changes sumD
-- Assign side-effects
reactimate $ fmap (prefixPrint "e1=") e1
reactimate $ fmap (prefixPrint "e2=") e2
reactimate $ fmap (prefixPrint "sum=") sumE
-- Fire it up
actuate network
-- Push data
push1 10
push2 20
-- Helper for printing values
prefixPrint p thing = putStrLn $ p ++ (show thing)
@raimohanska
Copy link
Author

This does not really work: the sumE event always gets an out-of-date value. Can you fix it?

@raimohanska
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment