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.