omnifmt-0.2.0.0: src/Omnifmt/Directory.hs
{-|
Module : Omnifmt.Directory
Description : System directory utilities.
Copyright : (c) Henry J. Wylde, 2015
License : BSD3
Maintainer : public@hjwylde.com
System directory utilities.
-}
module Omnifmt.Directory (
-- * Changing directories
withCurrentDirectory,
) where
import Control.Monad.Catch (MonadMask, bracket)
import Control.Monad.Except
import System.Directory.Extra hiding (withCurrentDirectory)
-- | @withCurrentDirectory dir action@ performs @action@ with the current directory set to @dir@.
-- The current directory is reset back to what it was afterwards.
withCurrentDirectory :: (MonadIO m, MonadMask m) => FilePath -> m a -> m a
withCurrentDirectory dir action = bracket (liftIO getCurrentDirectory) (liftIO . setCurrentDirectory)
$ \_ -> liftIO (setCurrentDirectory dir) >> action