HSHHelpers-0.1: HSH/Helpers/Instances.hs
{-# LANGUAGE FlexibleInstances #-}
module HSH.Helpers.Instances where
import HSH
import System.Exit
import System.Posix.Process
instance RunResult (IO (Either String ()) ) where
run cmd = checkResults =<< run cmd
{- | Evaluates result codes and raises an error for any bad ones it finds. -}
checkResults :: (String, ProcessStatus) -> IO (Either String ())
checkResults (cmd, ps) =
case ps of
Exited (ExitSuccess) -> return $ Right ()
Exited (ExitFailure x) ->
return $ Left $ cmd ++ ": exited with code " ++ show x
Terminated sig ->
return $ Left $ cmd ++ ": terminated by signal " ++ show sig
Stopped sig ->
return $ Left $ cmd ++ ": stopped by signal " ++ show sig