exitcode-0.1.0.9: src/Control/Process/Process.hs
{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Control.Process.Process(
module Process
, readCreateProcessWithExitCode
, readProcessWithExitCode
, waitForProcess
, getProcessExitCode
, getProcessExitCodeBool
) where
import Control.Applicative ( Applicative(pure) )
import Control.Category ( Category((.)) )
import Control.Exception ( Exception )
import Control.Exitcode
( ExitcodeT,
fromExitCode',
liftExitcode,
hoistExitcode,
tryExitcode,
_Exitcode1,
liftTryExitcode )
import Control.Lens ( Identity(runIdentity), set )
import Control.Monad ( Monad((>>=)) )
import Control.Monad.Except ( ExceptT(..) )
import Data.Bifunctor ( Bifunctor(bimap) )
import Data.Bool ( Bool )
import Data.Maybe ( Maybe(..), isJust, maybe )
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)
readCreateProcessWithExitCode ::
Exception e' =>
CreateProcess
-> String
-> ExitcodeT (ExceptT e' IO) (String, String) (String, String)
readCreateProcessWithExitCode p a =
tryExitcode (liftExitcode (P.readCreateProcessWithExitCode p a)) >>= \(x, y, z) ->
hoistExitcode (pure . runIdentity) (set _Exitcode1 (y, z) (fromExitCode' x))
readProcessWithExitCode ::
Exception e' =>
FilePath
-> [String]
-> String
-> ExitcodeT (ExceptT e' IO) (String, String) (String, String)
readProcessWithExitCode p a i =
tryExitcode (liftExitcode (P.readProcessWithExitCode p a i)) >>= \(x, y, z) ->
hoistExitcode (pure . runIdentity) (set _Exitcode1 (y, z) (fromExitCode' x))
waitForProcess ::
Exception e' =>
ProcessHandle
-> ExitcodeT (ExceptT e' IO) () ()
waitForProcess h =
tryExitcode (liftExitcode (P.waitForProcess h)) >>= \x ->
hoistExitcode (pure . runIdentity) (fromExitCode' x)
getProcessExitCode ::
Exception e' =>
ProcessHandle
-> ExitcodeT (ExceptT e' IO) (Maybe ()) (Maybe ())
getProcessExitCode h =
liftTryExitcode (P.getProcessExitCode h) >>=
maybe (pure Nothing) (hoistExitcode (pure . runIdentity) . set _Exitcode1 (Just ()) . fromExitCode')
getProcessExitCodeBool ::
Exception e' =>
ProcessHandle
-> ExitcodeT (ExceptT e' IO) Bool Bool
getProcessExitCodeBool =
bimap isJust isJust . getProcessExitCode