module System where import NHC.FFI import DExitCode foreign import ccall "system" primSystem :: PackedString -> IO Int system :: String -> IO ExitCode system cmd = do val <- primSystem (toCString cmd) if val == -1 || val == 127 then do errno <- getErrNo throwIOError ("system \""++cmd++"\"") Nothing Nothing errno else if val==0 then return ExitSuccess else return (ExitFailure val)