tubes-2.0.0.1: Write stream processing computations with side effects in a series of tubes.

Tubes.Util

Synopsis

# Documentation

stop :: Monad m => Tube a () m r Source

A default tube to end a series when no further processing is required.

cat :: Monad m => Tube a a m r Source

Continuously relays any values it receives.

for :: Monad m => Tube a b m r -> (b -> Tube a c m s) -> Tube a c m r Source

Loops over a `Tube` and gives each `yield`ed value to the continuation.

each :: (Monad m, Foldable t) => t b -> Tube () b m () Source

every :: (Foldable t, Monad m) => t b -> Tube () (Maybe b) m () Source

map :: Monad m => (a -> b) -> Tube a b m r Source

Transforms all incoming values according to some function.

drop :: Monad m => Int -> Tube a a m r Source

Refuses to yield the first `n` values it receives.

take :: Monad m => Int -> Tube a a m () Source

Relay only the first `n` elements of a stream.

takeWhile :: Monad m => (a -> Bool) -> Tube a a m () Source

Terminates the stream upon receiving a value violating the predicate

filter :: Monad m => (a -> Bool) -> Tube a a m r Source

Yields only values satisfying some predicate.

unyield :: Monad m => Tube x b m () -> m (Maybe (b, Tube x b m ())) Source

Taps the next value from a source, maybe.

pass :: Monad m => a -> Tube a b m () -> m (Maybe (b, Tube a b m ())) Source

Similar to `unyield` but it first sends a value through the tube.

mapM :: Monad m => (a -> m b) -> Tube a b m r Source

Similar to `map` except it maps a monadic function instead of a pure one.

sequence :: Monad m => Tube (m a) a m r Source

Evaluates and extracts a pure value from a monadic one.

lfold :: (x -> a -> x) -> (x -> (b, x)) -> x -> Pump b a Identity x Source

Constructs a resumable left fold. Example usage:

```    summer :: Pump () Int Identity Int
summer = lfold (+) (x -> ((),x)) 0

main :: IO ()
main = do
result <- stream const (duplicate summer) \$ each [1..10]
putStrLn . show . extract \$ result -- "55"
result2 <- stream const (duplicate result) \$ each [11..20]
putStrLn . show . extract \$ result2 -- "210"
```