| Copyright | (c) Ivan Perez and Manuel Baerenz 2016 |
|---|---|
| License | BSD3 |
| Maintainer | ivan.perez@keera.co.uk |
| Safe Haskell | Safe-Inferred |
| Language | Haskell2010 |
Data.MonadicStreamFunction.Async
Description
This module contains operations on monadic streams that are asynchronous,
i.e. that change the speed at which data enters or leaves the MSF.
Documentation
concatS :: Monad m => MStream m [b] -> MStream m b Source #
Concatenates a monadic stream of lists to a monadic stream. The stream of lists will be called exactly when new data is needed.
Example:
>>>let intstream = constS $ putStrLn "Enter a list of Ints:" >> readLn :: MStream IO [Int]>>>reactimate $ concatS intstream >>> arrM printEnter a list of Ints: [1, 2, 33] 1 2 33 Enter a list of Ints: [] Enter a list of Ints: [] Enter a list of Ints: [1, 2] 1 2 Enter a list of Ints: ...
Beware that concatS msf becomes unproductive when msf starts outputting
empty lists forever. This is ok:
>>>let boolToList b = if b then ["Yes"] else []>>>let everyOddEmpty = count >>> arr (even >>> boolToList)>>>reactimate $ concatS everyOddEmpty >>> arrM print"Yes" "Yes" "Yes" "Yes" "Yes" ...
But this will be caught in a loop:
>>>let after3Empty = count >>> arr ((<= 3) >>> boolToList)>>>reactimate $ concatS after3Empty >>> arrM print"Yes" "Yes" "Yes" ^CInterrupted.