-- | Isolate backwards incompatible library changes to 'getModificationTime'
-- and provide lifted versions of some directory operations
module GF.System.Directory(module GF.System.Directory,module D) where
import Control.Monad.Trans(MonadIO(..))
import qualified System.Directory as D
import System.Directory as D
       hiding (canonicalizePath,createDirectoryIfMissing,
               doesDirectoryExist,doesFileExist,getModificationTime,
               getCurrentDirectory,getDirectoryContents,getPermissions,
               removeFile,renameFile)
--import Data.Time.Compat

canonicalizePath :: FilePath -> m FilePath
canonicalizePath FilePath
path = IO FilePath -> m FilePath
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO FilePath -> m FilePath) -> IO FilePath -> m FilePath
forall a b. (a -> b) -> a -> b
$ FilePath -> IO FilePath
D.canonicalizePath FilePath
path
createDirectoryIfMissing :: Bool -> FilePath -> m ()
createDirectoryIfMissing Bool
b = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> (FilePath -> IO ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> FilePath -> IO ()
D.createDirectoryIfMissing Bool
b
doesDirectoryExist :: FilePath -> m Bool
doesDirectoryExist FilePath
path = IO Bool -> m Bool
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ FilePath -> IO Bool
D.doesDirectoryExist FilePath
path
doesFileExist :: FilePath -> m Bool
doesFileExist FilePath
path = IO Bool -> m Bool
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ FilePath -> IO Bool
D.doesFileExist FilePath
path
getModificationTime :: FilePath -> m UTCTime
getModificationTime FilePath
path = IO UTCTime -> m UTCTime
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO UTCTime -> m UTCTime) -> IO UTCTime -> m UTCTime
forall a b. (a -> b) -> a -> b
$ {-fmap toUTCTime-} (FilePath -> IO UTCTime
D.getModificationTime FilePath
path)
getDirectoryContents :: FilePath -> m [FilePath]
getDirectoryContents FilePath
path = IO [FilePath] -> m [FilePath]
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO [FilePath] -> m [FilePath]) -> IO [FilePath] -> m [FilePath]
forall a b. (a -> b) -> a -> b
$ FilePath -> IO [FilePath]
D.getDirectoryContents FilePath
path

getCurrentDirectory :: MonadIO io => io FilePath
getCurrentDirectory :: io FilePath
getCurrentDirectory = IO FilePath -> io FilePath
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO FilePath
D.getCurrentDirectory
getPermissions :: FilePath -> m Permissions
getPermissions FilePath
path = IO Permissions -> m Permissions
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Permissions -> m Permissions)
-> IO Permissions -> m Permissions
forall a b. (a -> b) -> a -> b
$ FilePath -> IO Permissions
D.getPermissions FilePath
path

removeFile :: FilePath -> m ()
removeFile FilePath
path = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ FilePath -> IO ()
D.removeFile FilePath
path
renameFile :: FilePath -> FilePath -> m ()
renameFile FilePath
path = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> (FilePath -> IO ()) -> FilePath -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> FilePath -> IO ()
D.renameFile FilePath
path