module UnliftIO.Path.Directory (
createDirectory
, createDirectoryIfMissing
, removeDirectory
, removeDirectoryRecursive
, removePathForcibly
, renameDirectory
, listDirectory
, getDirectoryContents
, getCurrentDirectory
, setCurrentDirectory
, withCurrentDirectory
, getHomeDirectory
, getXdgDirectory
, UnliftIO.Directory.XdgDirectory(..)
, getAppUserDataDirectory
, getUserDocumentsDirectory
, getTemporaryDirectory
, removeFile
, renameFile
, renamePath
, copyFile
, copyFileWithMetadata
, makeAbsoluteDir
, makeAbsoluteFile
, makeRelativeToCurrentDirectoryDir
, makeRelativeToCurrentDirectoryFile
, findExecutable
, findExecutables
, UnliftIO.Directory.exeExtension
, getFileSize
, doesPathExist
, doesFileExist
, doesDirectoryExist
, pathIsSymbolicLink
, UnliftIO.Directory.Permissions
, UnliftIO.Directory.emptyPermissions
, UnliftIO.Directory.readable
, UnliftIO.Directory.writable
, UnliftIO.Directory.executable
, UnliftIO.Directory.searchable
, UnliftIO.Directory.setOwnerReadable
, UnliftIO.Directory.setOwnerWritable
, UnliftIO.Directory.setOwnerExecutable
, UnliftIO.Directory.setOwnerSearchable
, getPermissions
, setPermissions
, copyPermissions
, getAccessTime
, getModificationTime
, setAccessTime
, setModificationTime
) where
import Control.Monad
import Control.Monad.Catch
import Control.Monad.IO.Class
import Data.Time
import Path
import UnliftIO
import qualified UnliftIO.Directory
createDirectory :: MonadIO m => Path b Dir -> m ()
createDirectory = UnliftIO.Directory.createDirectory . toFilePath
createDirectoryIfMissing :: MonadIO m => Bool -> Path b Dir -> m ()
createDirectoryIfMissing b = UnliftIO.Directory.createDirectoryIfMissing b . toFilePath
removeDirectory :: MonadIO m => Path b Dir -> m ()
removeDirectory = UnliftIO.Directory.removeDirectory . toFilePath
removeDirectoryRecursive :: MonadIO m => Path b Dir -> m ()
removeDirectoryRecursive = UnliftIO.Directory.removeDirectoryRecursive . toFilePath
removePathForcibly :: MonadIO m => Path b t -> m ()
removePathForcibly = UnliftIO.Directory.removePathForcibly . toFilePath
renameDirectory :: MonadIO m => Path b Dir -> Path b' Dir -> m ()
renameDirectory x y = UnliftIO.Directory.renameDirectory (toFilePath x) (toFilePath y)
getDirectoryContents_ :: (MonadThrow m, MonadIO m) => Path b Dir -> m ([Path Rel Dir], [Path Rel File])
getDirectoryContents_ d = do
xs <- UnliftIO.Directory.listDirectory . toFilePath $ d
dirs <- mapM parseRelDir =<< filterM UnliftIO.Directory.doesDirectoryExist xs
fils <- mapM parseRelFile =<< filterM UnliftIO.Directory.doesFileExist xs
return (dirs, fils)
listDirectory :: (MonadThrow m, MonadIO m) => Path b Dir -> m ([Path Rel Dir], [Path Rel File])
listDirectory = getDirectoryContents_
getDirectoryContents :: (MonadThrow m, MonadIO m) => Path b Dir -> m ([Path Rel Dir], [Path Rel File])
getDirectoryContents = getDirectoryContents_
getCurrentDirectory :: (MonadThrow m, MonadIO m) => m (Path Abs Dir)
getCurrentDirectory = UnliftIO.Directory.getCurrentDirectory >>= parseAbsDir
setCurrentDirectory :: MonadIO m => Path Abs Dir -> m ()
setCurrentDirectory = UnliftIO.Directory.setCurrentDirectory . toFilePath
withCurrentDirectory :: (MonadThrow m, MonadUnliftIO m) => Path Abs Dir -> m a -> m a
withCurrentDirectory = UnliftIO.Directory.withCurrentDirectory . toFilePath
getHomeDirectory :: (MonadThrow m, MonadIO m) => m (Path Abs Dir)
getHomeDirectory = UnliftIO.Directory.getHomeDirectory >>= parseAbsDir
getXdgDirectory :: (MonadThrow m, MonadIO m) => UnliftIO.Directory.XdgDirectory -> Path Rel Dir -> m (Path Abs Dir)
getXdgDirectory x = UnliftIO.Directory.getXdgDirectory x . toFilePath >=> parseAbsDir
getAppUserDataDirectory :: (MonadThrow m, MonadIO m) => Path Rel Dir -> m (Path Abs Dir)
getAppUserDataDirectory = UnliftIO.Directory.getAppUserDataDirectory . toFilePath >=> parseAbsDir
getUserDocumentsDirectory :: (MonadThrow m, MonadIO m) => m (Path Abs Dir)
getUserDocumentsDirectory = UnliftIO.Directory.getUserDocumentsDirectory >>= parseAbsDir
getTemporaryDirectory :: (MonadThrow m, MonadIO m) => m (Path Abs Dir)
getTemporaryDirectory = UnliftIO.Directory.getTemporaryDirectory >>= parseAbsDir
removeFile :: MonadIO m => Path b File -> m ()
removeFile = UnliftIO.Directory.removeFile . toFilePath
renameFile :: MonadIO m => Path b File -> Path b' File -> m ()
renameFile x y = UnliftIO.Directory.renameFile (toFilePath x) (toFilePath y)
renamePath :: MonadIO m => Path b t -> Path b' t -> m ()
renamePath x y = UnliftIO.Directory.renamePath (toFilePath x) (toFilePath y)
copyFile :: MonadIO m => Path b File -> Path b' File -> m ()
copyFile x y = UnliftIO.Directory.copyFile (toFilePath x) (toFilePath y)
copyFileWithMetadata :: MonadIO m => Path b File -> Path b' File -> m ()
copyFileWithMetadata x y = UnliftIO.Directory.copyFile (toFilePath x) (toFilePath y)
makeAbsoluteDir :: (MonadThrow m, MonadIO m) => Path Rel Dir -> m (Path Abs Dir)
makeAbsoluteDir = UnliftIO.Directory.makeAbsolute . toFilePath >=> parseAbsDir
makeAbsoluteFile :: (MonadThrow m, MonadIO m) => Path Rel File -> m (Path Abs File)
makeAbsoluteFile = UnliftIO.Directory.makeAbsolute . toFilePath >=> parseAbsFile
makeRelativeToCurrentDirectoryDir :: (MonadThrow m, MonadIO m) => Path Abs Dir -> m (Path Rel Dir)
makeRelativeToCurrentDirectoryDir = UnliftIO.Directory.makeRelativeToCurrentDirectory . toFilePath >=> parseRelDir
makeRelativeToCurrentDirectoryFile :: (MonadThrow m, MonadIO m) => Path Abs File -> m (Path Rel File)
makeRelativeToCurrentDirectoryFile = UnliftIO.Directory.makeRelativeToCurrentDirectory . toFilePath >=> parseRelFile
findExecutable :: (MonadThrow m, MonadIO m) => String -> m (Maybe (Path Abs File))
findExecutable = UnliftIO.Directory.findExecutable >=> mapM parseAbsFile
findExecutables :: (MonadThrow m, MonadIO m) => String -> m [Path Abs File]
findExecutables = UnliftIO.Directory.findExecutables >=> mapM parseAbsFile
getFileSize :: MonadIO m => Path b File -> m Integer
getFileSize = UnliftIO.Directory.getFileSize . toFilePath
doesPathExist :: MonadIO m => Path b t -> m Bool
doesPathExist = UnliftIO.Directory.doesPathExist . toFilePath
doesFileExist :: MonadIO m => Path b File -> m Bool
doesFileExist = UnliftIO.Directory.doesFileExist . toFilePath
doesDirectoryExist :: MonadIO m => Path b Dir -> m Bool
doesDirectoryExist = UnliftIO.Directory.doesDirectoryExist . toFilePath
pathIsSymbolicLink :: MonadIO m => Path b t -> m Bool
pathIsSymbolicLink = UnliftIO.Directory.pathIsSymbolicLink . toFilePath
getPermissions :: MonadIO m => Path b t -> m UnliftIO.Directory.Permissions
getPermissions = UnliftIO.Directory.getPermissions . toFilePath
setPermissions :: MonadIO m => Path b t -> UnliftIO.Directory.Permissions -> m ()
setPermissions = UnliftIO.Directory.setPermissions . toFilePath
copyPermissions :: MonadIO m => Path b t -> Path b' t' -> m ()
copyPermissions x y = UnliftIO.Directory.copyPermissions (toFilePath x) (toFilePath y)
getAccessTime :: MonadIO m => Path b t -> m UTCTime
getAccessTime = UnliftIO.Directory.getAccessTime . toFilePath
getModificationTime :: MonadIO m => Path b t -> m UTCTime
getModificationTime = UnliftIO.Directory.getModificationTime . toFilePath
setAccessTime :: MonadIO m => Path b t -> UTCTime -> m ()
setAccessTime x = UnliftIO.Directory.setAccessTime (toFilePath x)
setModificationTime :: MonadIO m => Path b t -> UTCTime -> m ()
setModificationTime x = UnliftIO.Directory.setModificationTime (toFilePath x)