module Directory ( patchIOError , patchIOErrorVal , patchIOErrorF , patchIOErrorFVal) where import NHC.FFI returnEither :: String -> Maybe String -> Int -> a -> IO a returnEither cmd file err val = if err == -1 then do errno <- getErrNo throwIOError cmd file Nothing errno else return val patchIOError :: String -> IO Int -> IO () patchIOError cmd comp = do err <- comp returnEither cmd Nothing err () patchIOErrorVal :: String -> IO (Int,a) -> IO a patchIOErrorVal cmd comp = do (err,val) <- comp returnEither cmd Nothing err val ---- patchIOErrorF :: String -> String -> (String -> IO Int) -> IO () patchIOErrorF cmd f comp = do err <- comp f returnEither cmd (Just f) err () patchIOErrorFVal :: String -> String -> (String -> IO (Int,a)) -> IO a patchIOErrorFVal cmd f comp = do (err,val) <- comp f returnEither cmd (Just f) err val