dataflower-0.1.0.0: src/Test/Dataflow.hs
module Test.Dataflow (
runDataflow
) where
import Control.Concurrent.STM.TVar (newTVarIO, readTVarIO)
import Control.Monad.IO.Class (MonadIO (..))
import Data.Typeable (Typeable)
import Dataflow (Dataflow, Edge, compile, execute,
outputTVar)
import Prelude
runDataflow :: (Typeable i, Typeable o, MonadIO io) => (Edge o -> Dataflow (Edge i)) -> [i] -> io [o]
runDataflow dataflow inputs =
liftIO $ do
out <- newTVarIO []
program <- compile (dataflow =<< outputTVar (:) out)
execute inputs program
reverse <$> readTVarIO out