-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Run external processes, with strong typing of streams -- -- Please see the tutorial at -- https://github.com/fpco/typed-process#readme @package typed-process @version 0.2.12.0 -- | This module is internal and its contents may change without a -- warning or announcement. It is not subject to the PVP. module System.Process.Typed.Internal -- | An abstract configuration for a process, which can then be launched -- into an actual running Process. Takes three type parameters, -- providing the types of standard input, standard output, and standard -- error, respectively. -- -- There are three ways to construct a value of this type: -- -- -- -- In all cases, the default for all three streams is to inherit the -- streams from the parent process. For other settings, see the -- setters below for default values. -- -- Once you have a ProcessConfig you can launch a process from -- it using the functions in the section Launch a process. data ProcessConfig stdin stdout stderr ProcessConfig :: !CmdSpec -> !StreamSpec 'STInput stdin -> !StreamSpec 'STOutput stdout -> !StreamSpec 'STOutput stderr -> !Maybe FilePath -> !Maybe [(String, String)] -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Maybe GroupID -> !Maybe UserID -> ProcessConfig stdin stdout stderr [pcCmdSpec] :: ProcessConfig stdin stdout stderr -> !CmdSpec [pcStdin] :: ProcessConfig stdin stdout stderr -> !StreamSpec 'STInput stdin [pcStdout] :: ProcessConfig stdin stdout stderr -> !StreamSpec 'STOutput stdout [pcStderr] :: ProcessConfig stdin stdout stderr -> !StreamSpec 'STOutput stderr [pcWorkingDir] :: ProcessConfig stdin stdout stderr -> !Maybe FilePath [pcEnv] :: ProcessConfig stdin stdout stderr -> !Maybe [(String, String)] [pcCloseFds] :: ProcessConfig stdin stdout stderr -> !Bool [pcCreateGroup] :: ProcessConfig stdin stdout stderr -> !Bool [pcDelegateCtlc] :: ProcessConfig stdin stdout stderr -> !Bool [pcDetachConsole] :: ProcessConfig stdin stdout stderr -> !Bool [pcCreateNewConsole] :: ProcessConfig stdin stdout stderr -> !Bool [pcNewSession] :: ProcessConfig stdin stdout stderr -> !Bool [pcChildGroup] :: ProcessConfig stdin stdout stderr -> !Maybe GroupID [pcChildUser] :: ProcessConfig stdin stdout stderr -> !Maybe UserID -- | Whether a stream is an input stream or output stream. Note that this -- is from the perspective of the child process, so that a child's -- standard input stream is an STInput, even though the parent -- process will be writing to it. data StreamType STInput :: StreamType STOutput :: StreamType -- | A specification for how to create one of the three standard child -- streams, stdin, stdout and stderr. A -- StreamSpec can be thought of as containing -- --
    --
  1. A type safe version of StdStream from -- System.Process. This determines whether the stream should be -- inherited from the parent process, piped to or from a Handle, -- etc.
  2. --
  3. A means of accessing the stream as a value of type a
  4. --
  5. A cleanup action which will be run on the stream once the process -- terminates
  6. --
-- -- To create a StreamSpec see the section Stream specs. data StreamSpec (streamType :: StreamType) a StreamSpec :: !forall b. (StdStream -> IO b) -> IO b -> !ProcessConfig () () () -> Maybe Handle -> Cleanup a -> StreamSpec (streamType :: StreamType) a [ssStream] :: StreamSpec (streamType :: StreamType) a -> !forall b. (StdStream -> IO b) -> IO b [ssCreate] :: StreamSpec (streamType :: StreamType) a -> !ProcessConfig () () () -> Maybe Handle -> Cleanup a -- | Internal type, to make for easier composition of cleanup actions. newtype Cleanup a Cleanup :: IO (a, IO ()) -> Cleanup a [runCleanup] :: Cleanup a -> IO (a, IO ()) -- | Internal helper defaultProcessConfig :: ProcessConfig () () () -- | Create a ProcessConfig from the given command and arguments. proc :: FilePath -> [String] -> ProcessConfig () () () -- | Internal helper setProc :: FilePath -> [String] -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Create a ProcessConfig from the given shell command. shell :: String -> ProcessConfig () () () -- | Internal helper setShell :: String -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Set the child's standard input stream to the given StreamSpec. -- -- Default: inherit setStdin :: StreamSpec 'STInput stdin -> ProcessConfig stdin0 stdout stderr -> ProcessConfig stdin stdout stderr -- | Set the child's standard output stream to the given StreamSpec. -- -- Default: inherit setStdout :: StreamSpec 'STOutput stdout -> ProcessConfig stdin stdout0 stderr -> ProcessConfig stdin stdout stderr -- | Set the child's standard error stream to the given StreamSpec. -- -- Default: inherit setStderr :: StreamSpec 'STOutput stderr -> ProcessConfig stdin stdout stderr0 -> ProcessConfig stdin stdout stderr -- | Set the working directory of the child process. -- -- Default: current process's working directory. setWorkingDir :: FilePath -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Inherit the working directory from the parent process. setWorkingDirInherit :: ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Set the environment variables of the child process. -- -- Default: current process's environment. setEnv :: [(String, String)] -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Inherit the environment variables from the parent process. setEnvInherit :: ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Should we close all file descriptors besides stdin, stdout, and -- stderr? See close_fds for more information. -- -- Default: False setCloseFds :: Bool -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Should we create a new process group? -- -- Default: False setCreateGroup :: Bool -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Delegate handling of Ctrl-C to the child. For more information, see -- delegate_ctlc. -- -- Default: False setDelegateCtlc :: Bool -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Detach console on Windows, see detach_console. -- -- Default: False setDetachConsole :: Bool -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Create new console on Windows, see create_new_console. -- -- Default: False setCreateNewConsole :: Bool -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Set a new session with the POSIX setsid syscall, does nothing -- on non-POSIX. See new_session. -- -- Default: False setNewSession :: Bool -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Set the child process's group ID with the POSIX setgid -- syscall, does nothing on non-POSIX. See child_group. -- -- Default: False setChildGroup :: GroupID -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Inherit the group from the parent process. setChildGroupInherit :: ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Set the child process's user ID with the POSIX setuid -- syscall, does nothing on non-POSIX. See child_user. -- -- Default: False setChildUser :: UserID -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Inherit the user from the parent process. setChildUserInherit :: ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Create a new StreamSpec from the given StdStream and a -- helper function. This function: -- -- -- -- If making a StreamSpec with CreatePipe, prefer -- mkPipeStreamSpec, which encodes the invariant that a -- Handle is created. mkStreamSpec :: StdStream -> (ProcessConfig () () () -> Maybe Handle -> IO (a, IO ())) -> StreamSpec streamType a -- | Create a new CreatePipe StreamSpec from the given -- function. This function: -- -- mkPipeStreamSpec :: (ProcessConfig () () () -> Handle -> IO (a, IO ())) -> StreamSpec streamType a -- | Create a new StreamSpec from a function that accepts a -- StdStream and a helper function. This function is the same as -- the helper in mkStreamSpec mkManagedStreamSpec :: (forall b. (StdStream -> IO b) -> IO b) -> (ProcessConfig () () () -> Maybe Handle -> IO (a, IO ())) -> StreamSpec streamType a -- | A stream spec which simply inherits the stream of the parent process. inherit :: StreamSpec anyStreamType () -- | A stream spec which is empty when used for for input and discards -- output. Note this requires your platform's null device to be available -- when the process is started. nullStream :: StreamSpec anyStreamType () -- | A stream spec which will close the stream for the child process. You -- usually do not want to use this, as it will leave the corresponding -- file descriptor unassigned and hence available for re-use in the child -- process. Prefer nullStream unless you're certain you want this -- behavior. closed :: StreamSpec anyStreamType () -- | An input stream spec which sets the input to the given -- ByteString. A separate thread will be forked to write the -- contents to the child process. byteStringInput :: ByteString -> StreamSpec 'STInput () -- | Capture the output of a process in a ByteString. -- -- This function will fork a separate thread to consume all input from -- the process, and will only make the results available when the -- underlying Handle is closed. As this is provided as an -- STM action, you can either check if the result is available, or -- block until it's ready. -- -- In the event of any exception occurring when reading from the -- Handle, the STM action will throw a -- ByteStringOutputException. byteStringOutput :: StreamSpec 'STOutput (STM ByteString) -- | Helper function (not exposed) for both byteStringOutput and -- withProcessInterleave. This will consume all of the output -- from the given Handle in a separate thread and provide access -- to the resulting ByteString via STM. Second action will close -- the reader handle. byteStringFromHandle :: ProcessConfig () () () -> Handle -> IO (STM ByteString, IO ()) -- | Create a new pipe between this process and the child, and return a -- Handle to communicate with the child. createPipe :: StreamSpec anyStreamType Handle -- | Use the provided Handle for the child process, and when the -- process exits, do not close it. This is useful if, for example, -- you want to have multiple processes write to the same log file -- sequentially. useHandleOpen :: Handle -> StreamSpec anyStreamType () -- | Use the provided Handle for the child process, and when the -- process exits, close it. If you have no reason to keep the -- Handle open, you should use this over useHandleOpen. useHandleClose :: Handle -> StreamSpec anyStreamType () -- | Exception thrown by checkExitCode in the event of a non-success -- exit code. Note that checkExitCode is called by other functions -- as well, like runProcess_ or readProcess_. -- -- Note that several functions that throw an ExitCodeException -- intentionally do not populate eceStdout or eceStderr. -- This prevents unbounded memory usage for large stdout and stderrs. -- -- Functions which do include eceStdout or eceStderr (like -- readProcess_) state so in their documentation. data ExitCodeException ExitCodeException :: ExitCode -> ProcessConfig () () () -> ByteString -> ByteString -> ExitCodeException [eceExitCode] :: ExitCodeException -> ExitCode [eceProcessConfig] :: ExitCodeException -> ProcessConfig () () () [eceStdout] :: ExitCodeException -> ByteString [eceStderr] :: ExitCodeException -> ByteString -- | Wrapper for when an exception is thrown when reading from a child -- process, used by byteStringOutput. data ByteStringOutputException ByteStringOutputException :: SomeException -> ProcessConfig () () () -> ByteStringOutputException bracket :: MonadUnliftIO m => IO a -> (a -> IO b) -> (a -> m c) -> m c finally :: MonadUnliftIO m => m a -> IO () -> m a -- | The name of the system null device nullDevice :: FilePath instance GHC.Base.Functor System.Process.Typed.Internal.Cleanup instance GHC.Base.Functor (System.Process.Typed.Internal.StreamSpec streamType) instance GHC.Show.Show System.Process.Typed.Internal.ByteStringOutputException instance GHC.Exception.Type.Exception System.Process.Typed.Internal.ByteStringOutputException instance GHC.Exception.Type.Exception System.Process.Typed.Internal.ExitCodeException instance GHC.Show.Show System.Process.Typed.Internal.ExitCodeException instance GHC.Show.Show (System.Process.Typed.Internal.ProcessConfig stdin stdout stderr) instance (stdin GHC.Types.~ (), stdout GHC.Types.~ (), stderr GHC.Types.~ ()) => Data.String.IsString (System.Process.Typed.Internal.ProcessConfig stdin stdout stderr) instance (streamType GHC.Types.~ 'System.Process.Typed.Internal.STInput, res GHC.Types.~ ()) => Data.String.IsString (System.Process.Typed.Internal.StreamSpec streamType res) instance GHC.Base.Applicative System.Process.Typed.Internal.Cleanup -- | The simplest way to get started with this API is to turn on -- OverloadedStrings and call runProcess. The following -- will write the contents of /home to stdout and then -- print the exit code (on a UNIX system). -- --
--   {-# LANGUAGE OverloadedStrings #-}
--   
--   runProcess "ls -l /home" >>= print
--   
-- -- Please see the README.md file for more examples of using this -- API. module System.Process.Typed -- | An abstract configuration for a process, which can then be launched -- into an actual running Process. Takes three type parameters, -- providing the types of standard input, standard output, and standard -- error, respectively. -- -- There are three ways to construct a value of this type: -- -- -- -- In all cases, the default for all three streams is to inherit the -- streams from the parent process. For other settings, see the -- setters below for default values. -- -- Once you have a ProcessConfig you can launch a process from -- it using the functions in the section Launch a process. data ProcessConfig stdin stdout stderr -- | A specification for how to create one of the three standard child -- streams, stdin, stdout and stderr. A -- StreamSpec can be thought of as containing -- --
    --
  1. A type safe version of StdStream from -- System.Process. This determines whether the stream should be -- inherited from the parent process, piped to or from a Handle, -- etc.
  2. --
  3. A means of accessing the stream as a value of type a
  4. --
  5. A cleanup action which will be run on the stream once the process -- terminates
  6. --
-- -- To create a StreamSpec see the section Stream specs. data StreamSpec (streamType :: StreamType) a -- | Whether a stream is an input stream or output stream. Note that this -- is from the perspective of the child process, so that a child's -- standard input stream is an STInput, even though the parent -- process will be writing to it. data StreamType STInput :: StreamType STOutput :: StreamType -- | A running process. The three type parameters provide the type of the -- standard input, standard output, and standard error streams. -- -- To interact with a Process use the functions from the section -- Interact with a process. data Process stdin stdout stderr -- | Create a ProcessConfig from the given command and arguments. proc :: FilePath -> [String] -> ProcessConfig () () () -- | Create a ProcessConfig from the given shell command. shell :: String -> ProcessConfig () () () -- | Set the child's standard input stream to the given StreamSpec. -- -- Default: inherit setStdin :: StreamSpec 'STInput stdin -> ProcessConfig stdin0 stdout stderr -> ProcessConfig stdin stdout stderr -- | Set the child's standard output stream to the given StreamSpec. -- -- Default: inherit setStdout :: StreamSpec 'STOutput stdout -> ProcessConfig stdin stdout0 stderr -> ProcessConfig stdin stdout stderr -- | Set the child's standard error stream to the given StreamSpec. -- -- Default: inherit setStderr :: StreamSpec 'STOutput stderr -> ProcessConfig stdin stdout stderr0 -> ProcessConfig stdin stdout stderr -- | Set the working directory of the child process. -- -- Default: current process's working directory. setWorkingDir :: FilePath -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Inherit the working directory from the parent process. setWorkingDirInherit :: ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Set the environment variables of the child process. -- -- Default: current process's environment. setEnv :: [(String, String)] -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Inherit the environment variables from the parent process. setEnvInherit :: ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Should we close all file descriptors besides stdin, stdout, and -- stderr? See close_fds for more information. -- -- Default: False setCloseFds :: Bool -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Should we create a new process group? -- -- Default: False setCreateGroup :: Bool -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Delegate handling of Ctrl-C to the child. For more information, see -- delegate_ctlc. -- -- Default: False setDelegateCtlc :: Bool -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Detach console on Windows, see detach_console. -- -- Default: False setDetachConsole :: Bool -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Create new console on Windows, see create_new_console. -- -- Default: False setCreateNewConsole :: Bool -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Set a new session with the POSIX setsid syscall, does nothing -- on non-POSIX. See new_session. -- -- Default: False setNewSession :: Bool -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Set the child process's group ID with the POSIX setgid -- syscall, does nothing on non-POSIX. See child_group. -- -- Default: False setChildGroup :: GroupID -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Inherit the group from the parent process. setChildGroupInherit :: ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Set the child process's user ID with the POSIX setuid -- syscall, does nothing on non-POSIX. See child_user. -- -- Default: False setChildUser :: UserID -> ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | Inherit the user from the parent process. setChildUserInherit :: ProcessConfig stdin stdout stderr -> ProcessConfig stdin stdout stderr -- | A stream spec which simply inherits the stream of the parent process. inherit :: StreamSpec anyStreamType () -- | A stream spec which is empty when used for for input and discards -- output. Note this requires your platform's null device to be available -- when the process is started. nullStream :: StreamSpec anyStreamType () -- | A stream spec which will close the stream for the child process. You -- usually do not want to use this, as it will leave the corresponding -- file descriptor unassigned and hence available for re-use in the child -- process. Prefer nullStream unless you're certain you want this -- behavior. closed :: StreamSpec anyStreamType () -- | An input stream spec which sets the input to the given -- ByteString. A separate thread will be forked to write the -- contents to the child process. byteStringInput :: ByteString -> StreamSpec 'STInput () -- | Capture the output of a process in a ByteString. -- -- This function will fork a separate thread to consume all input from -- the process, and will only make the results available when the -- underlying Handle is closed. As this is provided as an -- STM action, you can either check if the result is available, or -- block until it's ready. -- -- In the event of any exception occurring when reading from the -- Handle, the STM action will throw a -- ByteStringOutputException. byteStringOutput :: StreamSpec 'STOutput (STM ByteString) -- | Create a new pipe between this process and the child, and return a -- Handle to communicate with the child. createPipe :: StreamSpec anyStreamType Handle -- | Use the provided Handle for the child process, and when the -- process exits, do not close it. This is useful if, for example, -- you want to have multiple processes write to the same log file -- sequentially. useHandleOpen :: Handle -> StreamSpec anyStreamType () -- | Use the provided Handle for the child process, and when the -- process exits, close it. If you have no reason to keep the -- Handle open, you should use this over useHandleOpen. useHandleClose :: Handle -> StreamSpec anyStreamType () -- | Create a new StreamSpec from the given StdStream and a -- helper function. This function: -- -- -- -- If making a StreamSpec with CreatePipe, prefer -- mkPipeStreamSpec, which encodes the invariant that a -- Handle is created. mkStreamSpec :: StdStream -> (ProcessConfig () () () -> Maybe Handle -> IO (a, IO ())) -> StreamSpec streamType a -- | Create a new CreatePipe StreamSpec from the given -- function. This function: -- -- mkPipeStreamSpec :: (ProcessConfig () () () -> Handle -> IO (a, IO ())) -> StreamSpec streamType a -- | Run the given process, wait for it to exit, and returns its -- ExitCode. runProcess :: MonadIO m => ProcessConfig stdin stdout stderr -> m ExitCode -- | Run a process, capture its standard output and error as a -- ByteString, wait for it to complete, and then return its exit -- code, output, and error. -- -- Note that any previously used setStdout or setStderr -- will be overridden. readProcess :: MonadIO m => ProcessConfig stdin stdoutIgnored stderrIgnored -> m (ExitCode, ByteString, ByteString) -- | Same as readProcess, but only read the stdout of the process. -- Original settings for stderr remain. readProcessStdout :: MonadIO m => ProcessConfig stdin stdoutIgnored stderr -> m (ExitCode, ByteString) -- | Same as readProcess, but only read the stderr of the process. -- Original settings for stdout remain. readProcessStderr :: MonadIO m => ProcessConfig stdin stdout stderrIgnored -> m (ExitCode, ByteString) -- | Same as readProcess, but interleaves stderr with stdout. -- -- Motivation: Use this function if you need stdout interleaved with -- stderr output (e.g. from an HTTP server) in order to debug failures. readProcessInterleaved :: MonadIO m => ProcessConfig stdin stdoutIgnored stderrIgnored -> m (ExitCode, ByteString) -- | Uses the bracket pattern to call startProcess. Unlike -- withProcessTerm, this function will wait for the child process -- to exit, and only kill it with stopProcess in the event that -- the inner function throws an exception. -- -- To interact with a Process use the functions from the section -- Interact with a process. withProcessWait :: MonadUnliftIO m => ProcessConfig stdin stdout stderr -> (Process stdin stdout stderr -> m a) -> m a -- | Uses the bracket pattern to call startProcess and ensures that -- stopProcess is called. -- -- This function is usually not what you want. You're likely -- better off using withProcessWait. See -- https://github.com/fpco/typed-process/issues/25. withProcessTerm :: MonadUnliftIO m => ProcessConfig stdin stdout stderr -> (Process stdin stdout stderr -> m a) -> m a -- | Launch a process based on the given ProcessConfig. You should -- ensure that you call stopProcess on the result. It's usually -- better to use one of the functions in this module which ensures -- stopProcess is called, such as withProcessWait. startProcess :: MonadIO m => ProcessConfig stdin stdout stderr -> m (Process stdin stdout stderr) -- | Close a process and release any resources acquired. This will ensure -- terminateProcess is called, wait for the process to actually -- exit, and then close out resources allocated for the streams. In the -- event of any cleanup exceptions being thrown this will throw an -- exception. stopProcess :: MonadIO m => Process stdin stdout stderr -> m () -- | Same as runProcess, but instead of returning the -- ExitCode, checks it with checkExitCode. runProcess_ :: MonadIO m => ProcessConfig stdin stdout stderr -> m () -- | Same as readProcess, but instead of returning the -- ExitCode, checks it with checkExitCode. -- -- Exceptions thrown by this function will include stdout and stderr. readProcess_ :: MonadIO m => ProcessConfig stdin stdoutIgnored stderrIgnored -> m (ByteString, ByteString) -- | Same as readProcessStdout, but instead of returning the -- ExitCode, checks it with checkExitCode. -- -- Exceptions thrown by this function will include stdout. readProcessStdout_ :: MonadIO m => ProcessConfig stdin stdoutIgnored stderr -> m ByteString -- | Same as readProcessStderr, but instead of returning the -- ExitCode, checks it with checkExitCode. -- -- Exceptions thrown by this function will include stderr. readProcessStderr_ :: MonadIO m => ProcessConfig stdin stdout stderrIgnored -> m ByteString -- | Same as readProcessInterleaved, but instead of returning the -- ExitCode, checks it with checkExitCode. -- -- Exceptions thrown by this function will include stdout. readProcessInterleaved_ :: MonadIO m => ProcessConfig stdin stdoutIgnored stderrIgnored -> m ByteString -- | Same as withProcessWait, but also calls checkExitCode withProcessWait_ :: MonadUnliftIO m => ProcessConfig stdin stdout stderr -> (Process stdin stdout stderr -> m a) -> m a -- | Same as withProcessTerm, but also calls checkExitCode -- -- To interact with a Process use the functions from the section -- Interact with a process. withProcessTerm_ :: MonadUnliftIO m => ProcessConfig stdin stdout stderr -> (Process stdin stdout stderr -> m a) -> m a -- | Wait for the process to exit and then return its ExitCode. waitExitCode :: MonadIO m => Process stdin stdout stderr -> m ExitCode -- | Same as waitExitCode, but in STM. waitExitCodeSTM :: Process stdin stdout stderr -> STM ExitCode -- | Check if a process has exited and, if so, return its ExitCode. getExitCode :: MonadIO m => Process stdin stdout stderr -> m (Maybe ExitCode) -- | Same as getExitCode, but in STM. getExitCodeSTM :: Process stdin stdout stderr -> STM (Maybe ExitCode) -- | Wait for a process to exit, and ensure that it exited successfully. If -- not, throws an ExitCodeException. -- -- Exceptions thrown by this function will not include stdout or stderr -- (This prevents unbounded memory usage from reading them into memory). -- However, some callers such as readProcess_ catch the exception, -- add the stdout and stderr, and rethrow. checkExitCode :: MonadIO m => Process stdin stdout stderr -> m () -- | Same as checkExitCode, but in STM. checkExitCodeSTM :: Process stdin stdout stderr -> STM () -- | Returns the PID (process ID) of a subprocess. -- -- Nothing is returned if the underlying ProcessHandle was -- already closed. Otherwise a PID is returned that remains valid as long -- as the handle is open. The operating system may reuse the PID as soon -- as the last handle to the process is closed. getPid :: Process stdin stdout stderr -> IO (Maybe Pid) -- | Get the child's standard input stream value. getStdin :: Process stdin stdout stderr -> stdin -- | Get the child's standard output stream value. getStdout :: Process stdin stdout stderr -> stdout -- | Get the child's standard error stream value. getStderr :: Process stdin stdout stderr -> stderr -- | Exception thrown by checkExitCode in the event of a non-success -- exit code. Note that checkExitCode is called by other functions -- as well, like runProcess_ or readProcess_. -- -- Note that several functions that throw an ExitCodeException -- intentionally do not populate eceStdout or eceStderr. -- This prevents unbounded memory usage for large stdout and stderrs. -- -- Functions which do include eceStdout or eceStderr (like -- readProcess_) state so in their documentation. data ExitCodeException ExitCodeException :: ExitCode -> ProcessConfig () () () -> ByteString -> ByteString -> ExitCodeException [eceExitCode] :: ExitCodeException -> ExitCode [eceProcessConfig] :: ExitCodeException -> ProcessConfig () () () [eceStdout] :: ExitCodeException -> ByteString [eceStderr] :: ExitCodeException -> ByteString -- | Get an ExitCodeException containing the process's stdout and -- stderr data. -- -- Note that this will call waitExitCode to block until the -- process exits, if it has not exited already. -- -- Unlike checkExitCode and similar, this will return an -- ExitCodeException even if the process exits with -- ExitSuccess. exitCodeExceptionWithOutput :: MonadIO m => Process stdin (STM ByteString) (STM ByteString) -> m ExitCodeException -- | Get an ExitCodeException containing no data other than the exit -- code and process config. -- -- Unlike checkExitCode and similar, this will return an -- ExitCodeException even if the process exits with -- ExitSuccess. exitCodeExceptionNoOutput :: Process stdin stdout stderr -> ExitCode -> ExitCodeException -- | Wrapper for when an exception is thrown when reading from a child -- process, used by byteStringOutput. data ByteStringOutputException ByteStringOutputException :: SomeException -> ProcessConfig () () () -> ByteStringOutputException -- | Defines the exit codes that a program can return. data () => ExitCode -- | indicates successful termination; ExitSuccess :: ExitCode -- | indicates program failure with an exit code. The exact interpretation -- of the code is operating-system dependent. In particular, some values -- may be prohibited (e.g. 0 on a POSIX-compliant system). ExitFailure :: Int -> ExitCode data () => StdStream -- | Inherit Handle from parent Inherit :: StdStream -- | Use the supplied Handle UseHandle :: Handle -> StdStream -- | Create a new pipe. The returned Handle will use the default -- encoding and newline translation mode (just like Handles -- created by openFile). CreatePipe :: StdStream -- | Close the stream's file descriptor without passing a Handle. On POSIX -- systems this may lead to strange behavior in the child process because -- attempting to read or write after the file has been closed throws an -- error. This should only be used with child processes that don't use -- the file descriptor at all. If you wish to ignore the child process's -- output you should either create a pipe and drain it manually or pass a -- Handle that writes to /dev/null. NoStream :: StdStream -- | The platform specific type for a process identifier. -- -- This is always an integral type. Width and signedness are platform -- specific. type Pid = CPid -- | Take ProcessHandle out of the Process. This method is -- needed in cases one need to use low level functions from the -- process package. Use cases for this method are: -- --
    --
  1. Send a special signal to the process.
  2. --
  3. Terminate the process group instead of terminating single -- process.
  4. --
  5. Use platform specific API on the underlying process.
  6. --
-- -- This method is considered unsafe because the actions it performs on -- the underlying process may overlap with the functionality that -- typed-process provides. For example the user should not call -- waitForProcess on the process handle as either -- waitForProcess or stopProcess will lock. Additionally, -- even if process was terminated by the terminateProcess or by -- sending signal, stopProcess should be called either way in -- order to cleanup resources allocated by the typed-process. unsafeProcessHandle :: Process stdin stdout stderr -> ProcessHandle -- | Deprecated synonym for withProcessTerm. -- | Deprecated: Please consider using withProcessWait, or -- instead use withProcessTerm withProcess :: MonadUnliftIO m => ProcessConfig stdin stdout stderr -> (Process stdin stdout stderr -> m a) -> m a -- | Deprecated synonym for withProcessTerm_. -- | Deprecated: Please consider using withProcessWait_, or -- instead use withProcessTerm_ withProcess_ :: MonadUnliftIO m => ProcessConfig stdin stdout stderr -> (Process stdin stdout stderr -> m a) -> m a instance GHC.Show.Show (System.Process.Typed.Process stdin stdout stderr)