haste-compiler-0.2.99: Haskell To ECMAScript compiler

Safe HaskellNone

FRP.Fursuit.Async

Synopsis

Documentation

async :: Signal (Pipe a -> IO ()) -> IO (Signal a)Source

Create an asynchronous signal. When the signal is triggered, it should arrange for a value to written into its obtained pipe at some point in the future; when that happens, the signal continues on its path.

The signal setup action is guaranteed to be called exactly once per received signal; thus the following code will print 1 two times rather than 1 followed by 2: ref <- newIORef () (p, s) <- pipe () sig async $ (\p - modifyIORef ref (+1) >> write p ref) <$ s sink (r -> readIORef r >>= print) sig sink (r -> readIORef r >>= print) sig write p () Async is primarily intended as a building block for other more high level signals, and should be used with extreme care as it permits arbitrary side effects to happen in the course of propagating a signal.

It's also worth noting that triggering the signal returned by async does not trigger the setup signal, but will instead use the last value held by the output signal, if any.