{-# options_haddock prune #-}
module Polysemy.Process.Effect.SystemProcess where
import Polysemy.Resume (type (!!))
import System.Exit (ExitCode)
import qualified System.Posix as Signal
import System.Posix (Signal)
import Polysemy.Process.Data.Pid (Pid)
data SystemProcess :: Effect where
ReadStdout :: SystemProcess m ByteString
ReadStderr :: SystemProcess m ByteString
WriteStdin :: ByteString -> SystemProcess m ()
Pid :: SystemProcess m Pid
Signal :: Signal -> SystemProcess m ()
Wait :: SystemProcess m ExitCode
makeSem ''SystemProcess
withSystemProcess ::
∀ param err r .
Member (Scoped param (SystemProcess !! err)) r =>
param ->
InterpreterFor (SystemProcess !! err) r
withSystemProcess :: forall param err (r :: EffectRow).
Member (Scoped param (SystemProcess !! err)) r =>
param -> InterpreterFor (SystemProcess !! err) r
withSystemProcess =
forall param (effect :: Effect) (r :: EffectRow).
Member (Scoped param effect) r =>
param -> InterpreterFor effect r
scoped @param
withSystemProcess_ ::
∀ err r .
Member (Scoped_ (SystemProcess !! err)) r =>
InterpreterFor (SystemProcess !! err) r
withSystemProcess_ :: forall err (r :: EffectRow).
Member (Scoped_ (SystemProcess !! err)) r =>
InterpreterFor (SystemProcess !! err) r
withSystemProcess_ =
Sem ((SystemProcess !! err) : r) a -> Sem r a
InterpreterFor (SystemProcess !! err) r
forall (effect :: Effect) (r :: EffectRow).
Member (Scoped_ effect) r =>
InterpreterFor effect r
scoped_
interrupt ::
Member SystemProcess r =>
Sem r ()
interrupt :: forall (r :: EffectRow). Member SystemProcess r => Sem r ()
interrupt =
Signal -> Sem r ()
forall (r :: EffectRow).
Member SystemProcess r =>
Signal -> Sem r ()
signal Signal
Signal.sigINT
term ::
Member SystemProcess r =>
Sem r ()
term :: forall (r :: EffectRow). Member SystemProcess r => Sem r ()
term =
Signal -> Sem r ()
forall (r :: EffectRow).
Member SystemProcess r =>
Signal -> Sem r ()
signal Signal
Signal.sigTERM
kill ::
Member SystemProcess r =>
Sem r ()
kill :: forall (r :: EffectRow). Member SystemProcess r => Sem r ()
kill =
Signal -> Sem r ()
forall (r :: EffectRow).
Member SystemProcess r =>
Signal -> Sem r ()
signal Signal
Signal.sigKILL