shithub: MicroHs

Download patch

ref: 66c7fd6779c2e4c0032532edb3679a383d41b01e
parent: 5d846d4c9574bdd2ac5204d46cf42005894393e5
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Tue Jul 23 11:26:26 EDT 2024

Add withCurrentDirectory

--- a/lib/System/Directory.hs
+++ b/lib/System/Directory.hs
@@ -6,6 +6,7 @@
   listDirectory,
   setCurrentDirectory,
   getCurrentDirectory,
+  withCurrentDirectory,
   createDirectory,
   createDirectoryIfMissing,
   copyFile,
@@ -12,6 +13,7 @@
   getHomeDirectory,
   ) where
 import Prelude
+import Control.Exception(bracket)
 import Control.Monad(when)
 import Foreign.C.String
 import Foreign.Marshal.Alloc
@@ -87,6 +89,12 @@
     when (cwd == nullPtr) $
       error "getCurrentDirectory"
     peekCAString cwd
+
+withCurrentDirectory :: FilePath -> IO a -> IO a
+withCurrentDirectory dir io =
+  bracket getCurrentDirectory setCurrentDirectory $ \ _ -> do
+    setCurrentDirectory dir
+    io
 
 createDirectory :: FilePath -> IO ()
 createDirectory d = do
--