{-# LANGUAGE CPP #-}
module Effectful.Process.Dynamic.Effect
(
Process (..),
)
where
import Effectful
( Dispatch (Dynamic),
DispatchOf,
Effect,
)
import Effectful.Dynamic.Utils (ShowEffect (showEffectCons))
import Effectful.Process (Pid, ProcessHandle)
import Effectful.Process qualified as EP
import System.Exit (ExitCode)
import System.IO (Handle)
import System.Posix.Internals (FD)
data Process :: Effect where
CreateProcess ::
EP.CreateProcess ->
Process m (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle)
CreateProcess_ ::
String ->
EP.CreateProcess ->
Process m (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle)
CallProcess :: FilePath -> [String] -> Process m ()
CallCommand :: String -> Process m ()
SpawnProcess :: FilePath -> [String] -> Process m ProcessHandle
SpawnCommand :: String -> Process m ProcessHandle
ReadCreateProcess :: EP.CreateProcess -> String -> Process m String
ReadProcess ::
FilePath ->
[String] ->
String ->
Process m String
ReadCreateProcessWithExitCode ::
EP.CreateProcess ->
String ->
Process m (ExitCode, String, String)
ReadProcessWithExitCode ::
FilePath ->
[String] ->
String ->
Process m (ExitCode, String, String)
WithCreateProcess ::
EP.CreateProcess ->
(Maybe Handle -> Maybe Handle -> Maybe Handle -> ProcessHandle -> m a) ->
Process m a
CleanupProcess ::
(Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle) ->
Process m ()
GetPid :: ProcessHandle -> Process m (Maybe Pid)
GetCurrentPid :: Process m Pid
WaitForProcess :: ProcessHandle -> Process m ExitCode
GetProcessExitCode :: ProcessHandle -> Process m (Maybe ExitCode)
TerminateProcess :: ProcessHandle -> Process m ()
InterruptProcessGroupOf :: ProcessHandle -> Process m ()
CreatePipe :: Process m (Handle, Handle)
CreatePipeFd :: Process m (FD, FD)
type instance DispatchOf Process = Dynamic
instance ShowEffect Process where
showEffectCons :: forall (m :: * -> *) a. Process m a -> String
showEffectCons = \case
CreateProcess {} -> String
"CreateProcess"
CreateProcess_ {} -> String
"CreateProcess_"
CallProcess {} -> String
"CallProcess"
CallCommand {} -> String
"CallCommand"
SpawnProcess {} -> String
"SpawnProcess"
SpawnCommand {} -> String
"SpawnCommand"
ReadCreateProcess {} -> String
"ReadCreateProcess"
ReadProcess {} -> String
"ReadProcess"
ReadCreateProcessWithExitCode {} -> String
"ReadCreateProcessWithExitCode"
ReadProcessWithExitCode {} -> String
"ReadProcessWithExitCode"
WithCreateProcess {} -> String
"WithCreateProcess"
CleanupProcess {} -> String
"CleanupProcess"
GetPid {} -> String
"GetPid"
GetCurrentPid {} -> String
"GetCurrentPid"
WaitForProcess {} -> String
"WaitForProcess"
GetProcessExitCode {} -> String
"GetProcessExitCode"
TerminateProcess {} -> String
"TerminateProcess"
InterruptProcessGroupOf {} -> String
"InterruptProcessGroupOf"
CreatePipe {} -> String
"CreatePipe"
CreatePipeFd {} -> String
"CreatePipeFd"