Data.Conduit.Process

conduit-extra-1.3.7: Batteries included conduit: adapters for common libraries.

Safe Haskell | None
Language | Haskell2010

Data.Conduit.Process

Contents

- Functions
- InputSource types
- Reexport
- Orphan instances

Description

A full tutorial for this module is available at: https://github.com/snoyberg/conduit/blob/master/PROCESS.md.

Some utilities in this module require the threaded runtime because they use `waitForProcess` internally.

Note that this is a very thin layer around the `Data.Streaming.Process` module. In particular, it:

- Provides orphan instances for conduit
- Provides some useful helper functions

Synopsis

- sourceCmdWithConsumer :: MonadIO m => String -> ConduitT ByteString Void m a -> m (ExitCode, a)
- sourceProcessWithConsumer :: MonadIO m => CreateProcess -> ConduitT ByteString Void m a -> m (ExitCode, a)
- sourceCmdWithStreams :: MonadUnliftIO m => String -> ConduitT () ByteString m () -> ConduitT ByteString Void m a -> ConduitT ByteString Void m b -> m (ExitCode, a, b)
- sourceProcessWithStreams :: MonadUnliftIO m => CreateProcess -> ConduitT () ByteString m () -> ConduitT ByteString Void m a -> ConduitT ByteString Void m b -> m (ExitCode, a, b)
- withCheckedProcessCleanup :: (InputSource stdin, OutputSink stderr, OutputSink stdout, MonadUnliftIO m) => CreateProcess -> (stdin -> stdout -> stderr -> m b) -> m b
- newtype FlushInput o (m :: Type -> Type) r = FlushInput (ConduitM (Flush ByteString) o m r)
- newtype BuilderInput o (m :: Type -> Type) r = BuilderInput (ConduitM Builder o m r)
- module Data.Streaming.Process

# Functions

sourceCmdWithConsumer #

Arguments

:: MonadIO m |
=> String | command
-> ConduitT ByteString Void m a | stdout
-> m (ExitCode, a) |

Like `sourceProcessWithConsumer` but providing the command to be run as a `String`.

Requires the threaded runtime.

Since 1.1.2

sourceProcessWithConsumer #

Arguments

:: MonadIO m |
=> CreateProcess |
-> ConduitT ByteString Void m a | stdout
-> m (ExitCode, a) |

Given a `CreateProcess`, run the process, with its output being used as a `Source` to feed the provided `Consumer`. Once the process has completed, return a tuple of the `ExitCode` from the process and the output collected from the `Consumer`.

Note that, if an exception is raised by the consumer, the process is not terminated. This behavior is different from `sourceProcessWithStreams` due to historical reasons.

Requires the threaded runtime.

Since 1.1.2

sourceCmdWithStreams #

Arguments

:: MonadUnliftIO m |
=> String | command
-> ConduitT () ByteString m () | stdin
-> ConduitT ByteString Void m a | stdout
-> ConduitT ByteString Void m b | stderr
-> m (ExitCode, a, b) |

Like `sourceProcessWithStreams` but providing the command to be run as a `String`.

Requires the threaded runtime.

Since: 1.1.12

sourceProcessWithStreams #

Arguments

:: MonadUnliftIO m |
=> CreateProcess |
-> ConduitT () ByteString m () | stdin
-> ConduitT ByteString Void m a | stdout
-> ConduitT ByteString Void m b | stderr
-> m (ExitCode, a, b) |

Given a `CreateProcess`, run the process and feed the provided `Producer` to the stdin `Sink` of the process. Use the process outputs (stdout, stderr) as `Source`s and feed it to the provided `Consumer`s. Once the process has completed, return a tuple of the `ExitCode` from the process and the results collected from the `Consumer`s.

If an exception is raised by any of the streams, the process is terminated.

IO is required because the streams are run concurrently using the async package

Requires the threaded runtime.

Since: 1.1.12

withCheckedProcessCleanup :: (InputSource stdin, OutputSink stderr, OutputSink stdout, MonadUnliftIO m) => CreateProcess -> (stdin -> stdout -> stderr -> m b) -> m b #

Same as `withCheckedProcess`, but kills the child process in the case of an exception being thrown by the provided callback function.

Requires the threaded runtime.

Since: 1.1.11

# InputSource types

newtype FlushInput o (m :: Type -> Type) r #

Wrapper for input source which accepts `Flush`es. Note that the pipe will not automatically close then processing completes.

Since: 1.3.2

Constructors

FlushInput (ConduitM (Flush ByteString) o m r) |

#### Instances

Instances details

(MonadIO m, MonadIO n, r ~ (), r' ~ ()) => InputSource (FlushInput o m r, n r') # |
Instance details Defined in Data.Conduit.Process Methods isStdStream :: (Maybe Handle -> IO (FlushInput o m r, n r'), Maybe StdStream) #
(MonadIO m, r ~ ()) => InputSource (FlushInput o m r) # |
Instance details Defined in Data.Conduit.Process Methods isStdStream :: (Maybe Handle -> IO (FlushInput o m r), Maybe StdStream) #

newtype BuilderInput o (m :: Type -> Type) r #

Wrapper for input source which accepts `Builder`s. You can pass `flush` to flush the input. Note that the pipe will not automatically close when the processing completes.

Since: 1.3.2

Constructors

BuilderInput (ConduitM Builder o m r) |

#### Instances

Instances details

(MonadIO m, MonadIO n, r ~ (), r' ~ ()) => InputSource (BuilderInput o m r, n r') # |
Instance details Defined in Data.Conduit.Process Methods isStdStream :: (Maybe Handle -> IO (BuilderInput o m r, n r'), Maybe StdStream) #
(MonadIO m, r ~ ()) => InputSource (BuilderInput o m r) # |
Instance details Defined in Data.Conduit.Process Methods isStdStream :: (Maybe Handle -> IO (BuilderInput o m r), Maybe StdStream) #

# Reexport

module Data.Streaming.Process

# Orphan instances

(r ~ (), r' ~ (), MonadIO m, MonadIO n, i ~ ByteString) => InputSource (ConduitM i o m r, n r') # |
Instance details Methods isStdStream :: (Maybe Handle -> IO (ConduitM i o m r, n r'), Maybe StdStream) #
(r ~ (), r' ~ (), MonadIO m, MonadIO n, o ~ ByteString) => OutputSink (ConduitM i o m r, n r') # |
Instance details Methods osStdStream :: (Maybe Handle -> IO (ConduitM i o m r, n r'), Maybe StdStream) #
(r ~ (), MonadIO m, i ~ ByteString) => InputSource (ConduitM i o m r) # |
Instance details Methods isStdStream :: (Maybe Handle -> IO (ConduitM i o m r), Maybe StdStream) #
(r ~ (), MonadIO m, o ~ ByteString) => OutputSink (ConduitM i o m r) # |
Instance details Methods osStdStream :: (Maybe Handle -> IO (ConduitM i o m r), Maybe StdStream) #