diff options
Diffstat (limited to 'app/Process.hs')
-rw-r--r-- | app/Process.hs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/app/Process.hs b/app/Process.hs new file mode 100644 index 0000000..39132d4 --- /dev/null +++ b/app/Process.hs @@ -0,0 +1,25 @@ +module Process (sh, sh_, quote) where + +import Control.Exception (Exception, throwIO) +import Data.ByteString.Lazy (ByteString) +import System.Exit (ExitCode (ExitSuccess)) +import System.Process.Typed (ProcessConfig, readProcess, readProcessStderr) + +data ProcessException = ProcessException String ExitCode ByteString + deriving (Show) + +instance Exception ProcessException + +sh :: ProcessConfig stdin stdoutIgnored stderr -> IO ByteString +sh proc = do + (exitCode, out, err) <- readProcess proc + if exitCode == ExitSuccess + then pure out + else throwIO $ ProcessException (show proc) exitCode err + +sh_ :: ProcessConfig stdin stdoutIgnored stderr -> IO () +sh_ proc = do + (exitCode, err) <- readProcessStderr proc + if exitCode == ExitSuccess + then pure () + else throwIO $ ProcessException (show proc) exitCode err |