Run a process, streaming data in or out.
A lot of configuration options are available to fine-tune which inputs and outputs are streamed.
This uses streaming-with to handle resource management, and
streaming-concurrency for handling both stdout and stderr
together.
As such, code is typically run in a continuation-passing-style. You
may wish to use the Streaming.Process.Lifted module if you have many
of these nested.
The functions in this library will all throw
ProcessExitedUnsuccessfully if the process/command itself fails.
If using this module, you will need to have:
ghc-options -threadedin the executable section of your .cabal file, otherwise your code
will likely hang!