Module Foundation defines the pipe computations and their basic building blocks.

- data Monad m => Pipe context m r
- data Source context x
- data Sink context x
- type Consumer m x r = forall c. Source c x -> Pipe c m r
- type Producer m x r = forall c. Sink c x -> Pipe c m r
- pipe :: forall context x m r1 r2. Monad m => Producer m x r1 -> Consumer m x r2 -> Pipe context m (r1, r2)
- pipeD :: forall context x m r1 r2. Monad m => String -> Producer m x r1 -> Consumer m x r2 -> Pipe context m (r1, r2)
- get :: forall context context' x m r. (Monad m, Typeable x) => Source context' x -> Pipe context m (Maybe x)
- getSuccess :: forall context context' x m. (Monad m, Typeable x) => Source context' x -> (x -> Pipe context m ()) -> Pipe context m ()
- canPut :: forall context context' x m r. (Monad m, Typeable x) => Sink context' x -> Pipe context m Bool
- put :: forall context context' x m r. (Monad m, Typeable x) => Sink context' x -> x -> Pipe context m Bool
- liftPipe :: forall context m r. Monad m => m r -> Pipe context m r
- runPipes :: forall m r. Monad m => (forall context. Pipe context m r) -> m r
- cond :: a -> a -> Bool -> a
- whenNull :: forall a m. Monad m => m [a] -> [a] -> m [a]
- pour :: forall c c1 c2 x m. (Monad m, Typeable x) => Source c1 x -> Sink c2 x -> Pipe c m ()
- tee :: (Monad m, Typeable x) => Source c1 x -> Sink c2 x -> Sink c3 x -> Pipe c m ()
- getList :: forall x c c1 m. (Monad m, Typeable x) => Source c1 x -> Pipe c m [x]
- putList :: forall x c c1 m. (Monad m, Typeable x) => [x] -> Sink c1 x -> Pipe c m [x]
- consumeAndSuppress :: forall x c c1 m. (Monad m, Typeable x) => Source c1 x -> Pipe c m ()

# Types

# Flow-control functions

pipe :: forall context x m r1 r2. Monad m => Producer m x r1 -> Consumer m x r2 -> Pipe context m (r1, r2)Source

pipeD :: forall context x m r1 r2. Monad m => String -> Producer m x r1 -> Consumer m x r2 -> Pipe context m (r1, r2)Source

get :: forall context context' x m r. (Monad m, Typeable x) => Source context' x -> Pipe context m (Maybe x)Source

canPut :: forall context context' x m r. (Monad m, Typeable x) => Sink context' x -> Pipe context m BoolSource

put :: forall context context' x m r. (Monad m, Typeable x) => Sink context' x -> x -> Pipe context m BoolSource

runPipes :: forall m r. Monad m => (forall context. Pipe context m r) -> m rSource

Function `runPipes`

runs the given computation involving pipes and returns the final result.
The *context* argument ensures that no suspended computation can escape its scope.

# Utility functions

cond :: a -> a -> Bool -> aSource

A utility function wrapping if-then-else, useful for handling monadic truth values

whenNull :: forall a m. Monad m => m [a] -> [a] -> m [a]Source

A utility function, useful for handling monadic list values where empty list means success

pour :: forall c c1 c2 x m. (Monad m, Typeable x) => Source c1 x -> Sink c2 x -> Pipe c m ()Source

`pour`

copies all data from the *source* argument into the *sink* argument, as long as there is anything to copy
and the sink accepts it.

getList :: forall x c c1 m. (Monad m, Typeable x) => Source c1 x -> Pipe c m [x]Source

`getList`

returns the list of all values generated by the source.

putList :: forall x c c1 m. (Monad m, Typeable x) => [x] -> Sink c1 x -> Pipe c m [x]Source

`putList`

puts entire list into its *sink* argument, as long as the sink accepts it. The remainder that wasn't
accepted by the sink is the result value.

consumeAndSuppress :: forall x c c1 m. (Monad m, Typeable x) => Source c1 x -> Pipe c m ()Source

`consumeAndSuppress`

consumes the entire source ignoring the values it generates.