{-# OPTIONS_GHC -Wall #-} {-# LANGUAGE NoImplicitPrelude #-} module Control.Process.Process( module Process , readCreateProcessWithExitCode , readProcessWithExitCode , waitForProcess , getProcessExitCode ) where import Control.Applicative ( Applicative(pure) ) import Control.Category ( Category((.)) ) import Control.Exitcode ( ExitcodeT0, fromExitCode', liftExitcode, ExitcodeT1, _Exitcode1, hoistExitcode ) import Control.Lens ( Identity(runIdentity), set ) import Control.Monad ( Monad((>>=)) ) import Data.String ( String ) import System.FilePath( FilePath ) import System.IO ( IO ) import System.Process as Process( createProcess , createProcess_ , shell , proc , CreateProcess() , CmdSpec(..) , StdStream(..) , ProcessHandle , callProcess , callCommand , spawnProcess , readCreateProcess , readProcess , withCreateProcess , cleanupProcess , showCommandForUser , Pid , getPid , getCurrentPid , terminateProcess , interruptProcessGroupOf , createPipe , createPipeFd ) import qualified System.Process as P(readCreateProcessWithExitCode, readProcessWithExitCode, waitForProcess, getProcessExitCode) import Control.Monad.Trans.Maybe ( MaybeT(MaybeT) ) readCreateProcessWithExitCode :: CreateProcess -> String -> ExitcodeT1 IO (String, String) readCreateProcessWithExitCode p a = liftExitcode (P.readCreateProcessWithExitCode p a) >>= \(x, y, z) -> hoistExitcode (pure . runIdentity) (set _Exitcode1 (y, z) (fromExitCode' x)) readProcessWithExitCode :: FilePath -> [String] -> String -> ExitcodeT1 IO (String, String) readProcessWithExitCode p a i = liftExitcode (P.readProcessWithExitCode p a i) >>= \(x, y, z) -> hoistExitcode (pure . runIdentity) (set _Exitcode1 (y, z) (fromExitCode' x)) waitForProcess :: ProcessHandle -> ExitcodeT0 IO waitForProcess h = liftExitcode (P.waitForProcess h) >>= \x -> hoistExitcode (pure . runIdentity) (fromExitCode' x) getProcessExitCode :: ProcessHandle -> ExitcodeT0 (MaybeT IO) getProcessExitCode h = liftExitcode (MaybeT (P.getProcessExitCode h)) >>= hoistExitcode (pure . runIdentity) . fromExitCode'