import Data.Monoid
import System.IO
import FRP.Reactive
import FRP.Reactive.Internal.Reactive
import FRP.Reactive.Internal.Future


printFutures :: Show a => Event a -> IO ()
printFutures e | isNeverE e = print "never-never"
printFutures (Event (Future (t,a `Stepper` e))) = print (Future (t,a)) >> printFutures e

joinE :: Event (Event a) -> Event a
joinE (Event u) = Event (u >>= eFuture . g)
 where 
   g (v `Stepper` vs) = v `mappend` joinE vs


main :: IO ()
main = do
  hSetBuffering stdout NoBuffering
  let ev1  = countE_ $ atTimes [2,2.5,3.2,3.7]
      allE = fmap atTime ev1
  printFutures ev1
  printFutures $ joinE allE

