hw-prelude-0.0.0.1: src/HaskellWorks/IO/Process.hs
module HaskellWorks.IO.Process
( maybeWaitForProcess,
waitSecondsForProcess,
) where
import Control.Concurrent as IO
import Control.Concurrent.Async as IO
import qualified Control.Exception as IO
import Data.Maybe
import System.Exit
import System.IO
import Control.Applicative
import Data.Function
import Data.Functor
import HaskellWorks.Error.Types
import HaskellWorks.Prelude
import qualified System.Process as IO
import System.Process
maybeWaitForProcess :: ()
=> ProcessHandle
-> IO (Maybe ExitCode)
maybeWaitForProcess hProcess =
IO.catch (fmap Just (IO.waitForProcess hProcess)) $ \(_ :: AsyncCancelled) -> pure Nothing
waitSecondsForProcess :: ()
=> Int
-> ProcessHandle
-> IO (Either TimedOut (Maybe ExitCode))
waitSecondsForProcess seconds hProcess =
IO.race
(IO.threadDelay (seconds * 1000000) >> pure (TimedOut "Timed out waiting for process"))
(maybeWaitForProcess hProcess)