module Hi.Directory ( inTemporaryDirectory , inDirectory ) where import Control.Exception (bracket_) import System.Directory import System.IO.Temp (withSystemTempDirectory) -- |Run callback in a temporary directory. inTemporaryDirectory :: String -- ^ Base of temporary directory name -> IO a -> IO a -- ^ Callback inTemporaryDirectory name callback = withSystemTempDirectory name $ flip inDirectory callback -- |Run callback in given directory. inDirectory :: FilePath -- ^ Filepath to run callback -> IO a -> IO a -- ^ Callback inDirectory path callback = do pwd <- getCurrentDirectory bracket_ (setCurrentDirectory path) (setCurrentDirectory pwd) callback