Safe Haskell | None |
---|---|
Language | Haskell2010 |
Coquina provides a convenient interface for running shell commands in Haskell.
The core functionality of Coquina is the ability to run a sequence of Shell
operations, inspect the output of each operation, combine their results (i.e.,
their exit codes, stdout, and stderr), and stop execution if one of them fails.
See the readme for an example.
Synopsis
- class Monad m => MonadShell m where
- tellOutput :: (Text, Text) -> m ()
- readOutput :: m a -> m ((Text, Text), a)
- tellStdout :: MonadShell m => Text -> m ()
- tellStderr :: MonadShell m => Text -> m ()
- readStdout :: MonadShell m => m a -> m (Text, a)
- readStderr :: MonadShell m => m a -> m (Text, a)
- newtype Shell m a = Shell {}
- runShell :: Monad m => Shell m a -> m (Text, Text, Either Int a)
- execShell :: Monad m => Shell m a -> m (ExitCode, Text, Text)
- hoistShell :: (forall x. m x -> n x) -> Shell m a -> Shell n a
- run :: MonadIO m => CreateProcess -> Shell m ()
- shellCreateProcess :: MonadIO m => CreateProcess -> Shell m ()
- shellCreateProcessWith :: MonadIO m => (CreateProcess -> IO (ExitCode, Text, Text)) -> CreateProcess -> Shell m ()
- shellCreateProcessWithEnv :: MonadIO m => Map String String -> CreateProcess -> Shell m ()
- runCreateProcess :: CreateProcess -> IO (ExitCode, Text, Text)
- runCreateProcessWithEnv :: Map String String -> CreateProcess -> IO (ExitCode, Text, Text)
- shellCreateProcessWithStdOut :: MonadIO m => Handle -> CreateProcess -> Shell m ()
- inTempDirectory :: MonadIO m => String -> (FilePath -> Shell IO a) -> Shell m a
- data StreamingProcess m = StreamingProcess {
- _streamingProcess_waitForProcess :: !(Shell m ExitCode)
- _streamingProcess_terminateProcess :: !(Shell m ())
- _streamingProcess_getProcessExitCode :: !(Shell m (Maybe ExitCode))
- shellStreamableProcess :: (MonadIO m, MonadMask m) => (ByteString -> IO ()) -> (ByteString -> IO ()) -> CreateProcess -> Shell m (StreamingProcess m)
- shellStreamableProcessBuffered :: (MonadIO m, MonadMask m) => CreateProcess -> Shell m (StreamingProcess m, IO ByteString, IO ByteString)
- logCommand :: CreateProcess -> IO ()
- showCommand :: CreateProcess -> String
The Shell Monad
class Monad m => MonadShell m where Source #
A class that supports reading and writing stdout and stderr
tellOutput :: (Text, Text) -> m () Source #
readOutput :: m a -> m ((Text, Text), a) Source #
tellStdout :: MonadShell m => Text -> m () Source #
Write to stdout
tellStderr :: MonadShell m => Text -> m () Source #
Write to stderr
readStdout :: MonadShell m => m a -> m (Text, a) Source #
Read the stdout of a command
readStderr :: MonadShell m => m a -> m (Text, a) Source #
Read the stderr of a command
An action that supports running commands, reading their output, and emitting output
Instances
MonadTrans Shell Source # | |
MonadWriter w m => MonadWriter w (Shell m) Source # | |
Monad m => MonadError Int (Shell m) Source # | |
Monad m => Monad (Shell m) Source # | |
Functor m => Functor (Shell m) Source # | |
Monad m => Applicative (Shell m) Source # | |
MonadIO m => MonadIO (Shell m) Source # | |
MonadThrow m => MonadThrow (Shell m) Source # | |
MonadCatch m => MonadCatch (Shell m) Source # | |
MonadMask m => MonadMask (Shell m) Source # | |
MonadLogger m => MonadLogger (Shell m) Source # | |
Monad m => MonadShell (Shell m) Source # | |
runShell :: Monad m => Shell m a -> m (Text, Text, Either Int a) Source #
Run a shell action, producing stdout, stderr, and a result.
execShell :: Monad m => Shell m a -> m (ExitCode, Text, Text) Source #
Run a shell action, producing an exit code, stdout, and stderr
hoistShell :: (forall x. m x -> n x) -> Shell m a -> Shell n a Source #
Hoist a shell action into another monad
Constructing Shell actions
run :: MonadIO m => CreateProcess -> Shell m () Source #
Run a CreateProcess
in a Shell
shellCreateProcess :: MonadIO m => CreateProcess -> Shell m () Source #
Run a CreateProcess
in a Shell
shellCreateProcessWith :: MonadIO m => (CreateProcess -> IO (ExitCode, Text, Text)) -> CreateProcess -> Shell m () Source #
Run a shell process using the given runner function
shellCreateProcessWithEnv :: MonadIO m => Map String String -> CreateProcess -> Shell m () Source #
Run a shell process with the given environment variables added to the existing environment
runCreateProcess :: CreateProcess -> IO (ExitCode, Text, Text) Source #
Execute a shell process
runCreateProcessWithEnv :: Map String String -> CreateProcess -> IO (ExitCode, Text, Text) Source #
Execute a shell process with environment variables
shellCreateProcessWithStdOut :: MonadIO m => Handle -> CreateProcess -> Shell m () Source #
Run a shell process with stdout directed to the provided handle
Running in a temporary directory
inTempDirectory :: MonadIO m => String -> (FilePath -> Shell IO a) -> Shell m a Source #
Run a shell command with access to a temporary directory
Streamable Shell processes
data StreamingProcess m Source #
Represents a process that is running and whose incremental output can
be retrieved before it completes. The _streamingProcess_waitForProcess
finalizer can be called to get the exit status of the process and to get
the final output.
StreamingProcess | |
|
Instances
Generic (StreamingProcess m) Source # | |
Defined in Coquina type Rep (StreamingProcess m) :: Type -> Type # from :: StreamingProcess m -> Rep (StreamingProcess m) x # to :: Rep (StreamingProcess m) x -> StreamingProcess m # | |
type Rep (StreamingProcess m) Source # | |
Defined in Coquina type Rep (StreamingProcess m) = D1 (MetaData "StreamingProcess" "Coquina" "coquina-0.1.0.0-inplace" False) (C1 (MetaCons "StreamingProcess" PrefixI True) (S1 (MetaSel (Just "_streamingProcess_waitForProcess") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Shell m ExitCode)) :*: (S1 (MetaSel (Just "_streamingProcess_terminateProcess") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Shell m ())) :*: S1 (MetaSel (Just "_streamingProcess_getProcessExitCode") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Shell m (Maybe ExitCode)))))) |
shellStreamableProcess Source #
:: (MonadIO m, MonadMask m) | |
=> (ByteString -> IO ()) | Handle stdout |
-> (ByteString -> IO ()) | Handle stderr |
-> CreateProcess | |
-> Shell m (StreamingProcess m) |
A process whose output can be inspected while it is still running.
shellStreamableProcessBuffered Source #
:: (MonadIO m, MonadMask m) | |
=> CreateProcess | |
-> Shell m (StreamingProcess m, IO ByteString, IO ByteString) | ( |
Like shellStreamableProcess
but instead of taking handlers for each
stream, it automatically buffers the output of each stream and returns
IO
actions to read and clear the buffer.
Miscellaneous
logCommand :: CreateProcess -> IO () Source #
Print a shell command
showCommand :: CreateProcess -> String Source #
Convert a shell command to a string