module Language.Haskell.Modules.Util.Temp
( withTempDirectory
) where
import qualified Control.Exception as IO (catch)
import "MonadCatchIO-mtl" Control.Monad.CatchIO as IOT (bracket, MonadCatchIO)
import Control.Monad.Trans (liftIO, MonadIO)
import System.Directory (removeDirectoryRecursive)
import qualified System.IO.Temp as Temp (createTempDirectory)
withTempDirectory :: MonadCatchIO m =>
FilePath
-> String
-> (FilePath -> m a)
-> m a
withTempDirectory targetDir template =
IOT.bracket
(liftIO $ Temp.createTempDirectory targetDir template)
(liftIO . ignoringIOErrors . removeDirectoryRecursive)
ignoringIOErrors :: IO () -> IO ()
ignoringIOErrors ioe = ioe `IO.catch` (\e -> const (return ()) (e :: IOError))