module Effectful.FileSystem
(
FileSystem
, runFileSystem
, createDirectory
, createDirectoryIfMissing
, removeDirectory
, removeDirectoryRecursive
, removePathForcibly
, renameDirectory
, listDirectory
, getDirectoryContents
, getCurrentDirectory
, setCurrentDirectory
, withCurrentDirectory
, getHomeDirectory
, getXdgDirectory
, getXdgDirectoryList
, getAppUserDataDirectory
, getUserDocumentsDirectory
, getTemporaryDirectory
, removeFile
, renameFile
, renamePath
, copyFile
, copyFileWithMetadata
, getFileSize
, canonicalizePath
, makeAbsolute
, makeRelativeToCurrentDirectory
, doesPathExist
, doesFileExist
, doesDirectoryExist
, findExecutable
, findExecutables
, findExecutablesInDirectories
, findFile
, findFiles
, findFileWith
, findFilesWith
, createFileLink
, createDirectoryLink
, removeDirectoryLink
, pathIsSymbolicLink
, getSymbolicLinkTarget
, getPermissions
, setPermissions
, copyPermissions
, getAccessTime
, getModificationTime
, setAccessTime
, setModificationTime
, D.XdgDirectory(..)
, D.XdgDirectoryList(..)
, D.exeExtension
, D.Permissions
, D.emptyPermissions
, D.readable
, D.writable
, D.executable
, D.searchable
, D.setOwnerReadable
, D.setOwnerWritable
, D.setOwnerExecutable
, D.setOwnerSearchable
) where
import Data.Time (UTCTime)
import qualified System.Directory as D
import Effectful
import Effectful.Dispatch.Static
import Effectful.FileSystem.Effect
createDirectory :: FileSystem :> es => FilePath -> Eff es ()
createDirectory :: FilePath -> Eff es ()
createDirectory = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO ()
D.createDirectory
createDirectoryIfMissing :: FileSystem :> es => Bool -> FilePath -> Eff es ()
createDirectoryIfMissing :: Bool -> FilePath -> Eff es ()
createDirectoryIfMissing Bool
doCreateParents =
IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> FilePath -> IO ()
D.createDirectoryIfMissing Bool
doCreateParents
removeDirectory :: FileSystem :> es => FilePath -> Eff es ()
removeDirectory :: FilePath -> Eff es ()
removeDirectory = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO ()
D.removeDirectory
removeDirectoryRecursive :: FileSystem :> es => FilePath -> Eff es ()
removeDirectoryRecursive :: FilePath -> Eff es ()
removeDirectoryRecursive = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO ()
D.removeDirectoryRecursive
removePathForcibly :: FileSystem :> es => FilePath -> Eff es ()
removePathForcibly :: FilePath -> Eff es ()
removePathForcibly = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO ()
D.removePathForcibly
renameDirectory :: FileSystem :> es => FilePath -> FilePath -> Eff es ()
renameDirectory :: FilePath -> FilePath -> Eff es ()
renameDirectory FilePath
old = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> FilePath -> IO ()
D.renameDirectory FilePath
old
listDirectory :: FileSystem :> es => FilePath -> Eff es [FilePath]
listDirectory :: FilePath -> Eff es [FilePath]
listDirectory = IO [FilePath] -> Eff es [FilePath]
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO [FilePath] -> Eff es [FilePath])
-> (FilePath -> IO [FilePath]) -> FilePath -> Eff es [FilePath]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO [FilePath]
D.listDirectory
getDirectoryContents :: FileSystem :> es => FilePath -> Eff es [FilePath]
getDirectoryContents :: FilePath -> Eff es [FilePath]
getDirectoryContents = IO [FilePath] -> Eff es [FilePath]
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO [FilePath] -> Eff es [FilePath])
-> (FilePath -> IO [FilePath]) -> FilePath -> Eff es [FilePath]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO [FilePath]
D.getDirectoryContents
getCurrentDirectory :: FileSystem :> es => Eff es FilePath
getCurrentDirectory :: Eff es FilePath
getCurrentDirectory = IO FilePath -> Eff es FilePath
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ IO FilePath
D.getCurrentDirectory
setCurrentDirectory :: FileSystem :> es => FilePath -> Eff es ()
setCurrentDirectory :: FilePath -> Eff es ()
setCurrentDirectory = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO ()
D.setCurrentDirectory
withCurrentDirectory :: FileSystem :> es => FilePath -> Eff es a -> Eff es a
withCurrentDirectory :: FilePath -> Eff es a -> Eff es a
withCurrentDirectory FilePath
path = (IO a -> IO a) -> Eff es a -> Eff es a
forall a b (es :: [Effect]).
HasCallStack =>
(IO a -> IO b) -> Eff es a -> Eff es b
unsafeLiftMapIO (FilePath -> IO a -> IO a
forall a. FilePath -> IO a -> IO a
D.withCurrentDirectory FilePath
path)
getHomeDirectory :: FileSystem :> es => Eff es FilePath
getHomeDirectory :: Eff es FilePath
getHomeDirectory = IO FilePath -> Eff es FilePath
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ IO FilePath
D.getHomeDirectory
getXdgDirectory
:: FileSystem :> es
=> D.XdgDirectory
-> FilePath
-> Eff es FilePath
getXdgDirectory :: XdgDirectory -> FilePath -> Eff es FilePath
getXdgDirectory XdgDirectory
xdgDir = IO FilePath -> Eff es FilePath
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO FilePath -> Eff es FilePath)
-> (FilePath -> IO FilePath) -> FilePath -> Eff es FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. XdgDirectory -> FilePath -> IO FilePath
D.getXdgDirectory XdgDirectory
xdgDir
getXdgDirectoryList
:: FileSystem :> es
=> D.XdgDirectoryList
-> Eff es [FilePath]
getXdgDirectoryList :: XdgDirectoryList -> Eff es [FilePath]
getXdgDirectoryList = IO [FilePath] -> Eff es [FilePath]
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO [FilePath] -> Eff es [FilePath])
-> (XdgDirectoryList -> IO [FilePath])
-> XdgDirectoryList
-> Eff es [FilePath]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. XdgDirectoryList -> IO [FilePath]
D.getXdgDirectoryList
getAppUserDataDirectory :: FileSystem :> es => FilePath -> Eff es FilePath
getAppUserDataDirectory :: FilePath -> Eff es FilePath
getAppUserDataDirectory = IO FilePath -> Eff es FilePath
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO FilePath -> Eff es FilePath)
-> (FilePath -> IO FilePath) -> FilePath -> Eff es FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO FilePath
D.getAppUserDataDirectory
getUserDocumentsDirectory :: FileSystem :> es => Eff es FilePath
getUserDocumentsDirectory :: Eff es FilePath
getUserDocumentsDirectory = IO FilePath -> Eff es FilePath
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ IO FilePath
D.getUserDocumentsDirectory
getTemporaryDirectory :: FileSystem :> es => Eff es FilePath
getTemporaryDirectory :: Eff es FilePath
getTemporaryDirectory = IO FilePath -> Eff es FilePath
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ IO FilePath
D.getTemporaryDirectory
removeFile :: FileSystem :> es => FilePath -> Eff es ()
removeFile :: FilePath -> Eff es ()
removeFile = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO ()
D.removeFile
renameFile :: FileSystem :> es => FilePath -> FilePath -> Eff es ()
renameFile :: FilePath -> FilePath -> Eff es ()
renameFile FilePath
old = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> FilePath -> IO ()
D.renameFile FilePath
old
renamePath :: FileSystem :> es => FilePath -> FilePath -> Eff es ()
renamePath :: FilePath -> FilePath -> Eff es ()
renamePath FilePath
old = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> FilePath -> IO ()
D.renamePath FilePath
old
copyFile :: FileSystem :> es => FilePath -> FilePath -> Eff es ()
copyFile :: FilePath -> FilePath -> Eff es ()
copyFile FilePath
src = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> FilePath -> IO ()
D.copyFile FilePath
src
copyFileWithMetadata :: FileSystem :> es => FilePath -> FilePath -> Eff es ()
copyFileWithMetadata :: FilePath -> FilePath -> Eff es ()
copyFileWithMetadata FilePath
src = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> FilePath -> IO ()
D.copyFileWithMetadata FilePath
src
getFileSize :: FileSystem :> es => FilePath -> Eff es Integer
getFileSize :: FilePath -> Eff es Integer
getFileSize = IO Integer -> Eff es Integer
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO Integer -> Eff es Integer)
-> (FilePath -> IO Integer) -> FilePath -> Eff es Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO Integer
D.getFileSize
canonicalizePath :: FileSystem :> es => FilePath -> Eff es FilePath
canonicalizePath :: FilePath -> Eff es FilePath
canonicalizePath = IO FilePath -> Eff es FilePath
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO FilePath -> Eff es FilePath)
-> (FilePath -> IO FilePath) -> FilePath -> Eff es FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO FilePath
D.canonicalizePath
makeAbsolute :: FileSystem :> es => FilePath -> Eff es FilePath
makeAbsolute :: FilePath -> Eff es FilePath
makeAbsolute = IO FilePath -> Eff es FilePath
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO FilePath -> Eff es FilePath)
-> (FilePath -> IO FilePath) -> FilePath -> Eff es FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO FilePath
D.makeAbsolute
makeRelativeToCurrentDirectory
:: FileSystem :> es
=> FilePath
-> Eff es FilePath
makeRelativeToCurrentDirectory :: FilePath -> Eff es FilePath
makeRelativeToCurrentDirectory = IO FilePath -> Eff es FilePath
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO FilePath -> Eff es FilePath)
-> (FilePath -> IO FilePath) -> FilePath -> Eff es FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO FilePath
D.makeRelativeToCurrentDirectory
doesPathExist :: FileSystem :> es => FilePath -> Eff es Bool
doesPathExist :: FilePath -> Eff es Bool
doesPathExist = IO Bool -> Eff es Bool
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO Bool -> Eff es Bool)
-> (FilePath -> IO Bool) -> FilePath -> Eff es Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO Bool
D.doesPathExist
doesFileExist :: FileSystem :> es => FilePath -> Eff es Bool
doesFileExist :: FilePath -> Eff es Bool
doesFileExist = IO Bool -> Eff es Bool
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO Bool -> Eff es Bool)
-> (FilePath -> IO Bool) -> FilePath -> Eff es Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO Bool
D.doesFileExist
doesDirectoryExist :: FileSystem :> es => FilePath -> Eff es Bool
doesDirectoryExist :: FilePath -> Eff es Bool
doesDirectoryExist = IO Bool -> Eff es Bool
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO Bool -> Eff es Bool)
-> (FilePath -> IO Bool) -> FilePath -> Eff es Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO Bool
D.doesDirectoryExist
findExecutable :: FileSystem :> es => String -> Eff es (Maybe FilePath)
findExecutable :: FilePath -> Eff es (Maybe FilePath)
findExecutable = IO (Maybe FilePath) -> Eff es (Maybe FilePath)
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO (Maybe FilePath) -> Eff es (Maybe FilePath))
-> (FilePath -> IO (Maybe FilePath))
-> FilePath
-> Eff es (Maybe FilePath)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO (Maybe FilePath)
D.findExecutable
findExecutables :: FileSystem :> es => String -> Eff es [FilePath]
findExecutables :: FilePath -> Eff es [FilePath]
findExecutables = IO [FilePath] -> Eff es [FilePath]
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO [FilePath] -> Eff es [FilePath])
-> (FilePath -> IO [FilePath]) -> FilePath -> Eff es [FilePath]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO [FilePath]
D.findExecutables
findExecutablesInDirectories
:: FileSystem :> es
=> [FilePath]
-> String
-> Eff es [FilePath]
findExecutablesInDirectories :: [FilePath] -> FilePath -> Eff es [FilePath]
findExecutablesInDirectories [FilePath]
dirs =
IO [FilePath] -> Eff es [FilePath]
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO [FilePath] -> Eff es [FilePath])
-> (FilePath -> IO [FilePath]) -> FilePath -> Eff es [FilePath]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [FilePath] -> FilePath -> IO [FilePath]
D.findExecutablesInDirectories [FilePath]
dirs
findFile :: FileSystem :> es => [FilePath] -> String -> Eff es (Maybe FilePath)
findFile :: [FilePath] -> FilePath -> Eff es (Maybe FilePath)
findFile [FilePath]
dirs = IO (Maybe FilePath) -> Eff es (Maybe FilePath)
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO (Maybe FilePath) -> Eff es (Maybe FilePath))
-> (FilePath -> IO (Maybe FilePath))
-> FilePath
-> Eff es (Maybe FilePath)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [FilePath] -> FilePath -> IO (Maybe FilePath)
D.findFile [FilePath]
dirs
findFiles :: FileSystem :> es => [FilePath] -> String -> Eff es [FilePath]
findFiles :: [FilePath] -> FilePath -> Eff es [FilePath]
findFiles [FilePath]
dirs = IO [FilePath] -> Eff es [FilePath]
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO [FilePath] -> Eff es [FilePath])
-> (FilePath -> IO [FilePath]) -> FilePath -> Eff es [FilePath]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [FilePath] -> FilePath -> IO [FilePath]
D.findFiles [FilePath]
dirs
findFileWith
:: FileSystem :> es
=> (FilePath -> Eff es Bool)
-> [FilePath]
-> String
-> Eff es (Maybe FilePath)
findFileWith :: (FilePath -> Eff es Bool)
-> [FilePath] -> FilePath -> Eff es (Maybe FilePath)
findFileWith FilePath -> Eff es Bool
p [FilePath]
dirs FilePath
n = ((forall r. Eff es r -> IO r) -> IO (Maybe FilePath))
-> Eff es (Maybe FilePath)
forall (es :: [Effect]) a.
HasCallStack =>
((forall r. Eff es r -> IO r) -> IO a) -> Eff es a
unsafeSeqUnliftIO (((forall r. Eff es r -> IO r) -> IO (Maybe FilePath))
-> Eff es (Maybe FilePath))
-> ((forall r. Eff es r -> IO r) -> IO (Maybe FilePath))
-> Eff es (Maybe FilePath)
forall a b. (a -> b) -> a -> b
$ \forall r. Eff es r -> IO r
unlift -> do
(FilePath -> IO Bool)
-> [FilePath] -> FilePath -> IO (Maybe FilePath)
D.findFileWith (Eff es Bool -> IO Bool
forall r. Eff es r -> IO r
unlift (Eff es Bool -> IO Bool)
-> (FilePath -> Eff es Bool) -> FilePath -> IO Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Eff es Bool
p) [FilePath]
dirs FilePath
n
findFilesWith
:: FileSystem :> es
=> (FilePath -> Eff es Bool)
-> [FilePath]
-> String
-> Eff es [FilePath]
findFilesWith :: (FilePath -> Eff es Bool)
-> [FilePath] -> FilePath -> Eff es [FilePath]
findFilesWith FilePath -> Eff es Bool
p [FilePath]
dirs FilePath
ns = ((forall r. Eff es r -> IO r) -> IO [FilePath])
-> Eff es [FilePath]
forall (es :: [Effect]) a.
HasCallStack =>
((forall r. Eff es r -> IO r) -> IO a) -> Eff es a
unsafeSeqUnliftIO (((forall r. Eff es r -> IO r) -> IO [FilePath])
-> Eff es [FilePath])
-> ((forall r. Eff es r -> IO r) -> IO [FilePath])
-> Eff es [FilePath]
forall a b. (a -> b) -> a -> b
$ \forall r. Eff es r -> IO r
unlift -> do
(FilePath -> IO Bool) -> [FilePath] -> FilePath -> IO [FilePath]
D.findFilesWith (Eff es Bool -> IO Bool
forall r. Eff es r -> IO r
unlift (Eff es Bool -> IO Bool)
-> (FilePath -> Eff es Bool) -> FilePath -> IO Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Eff es Bool
p) [FilePath]
dirs FilePath
ns
createFileLink :: FileSystem :> es => FilePath -> FilePath -> Eff es ()
createFileLink :: FilePath -> FilePath -> Eff es ()
createFileLink FilePath
target = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> FilePath -> IO ()
D.createFileLink FilePath
target
createDirectoryLink :: FileSystem :> es => FilePath -> FilePath -> Eff es ()
createDirectoryLink :: FilePath -> FilePath -> Eff es ()
createDirectoryLink FilePath
target = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> FilePath -> IO ()
D.createDirectoryLink FilePath
target
removeDirectoryLink :: FileSystem :> es => FilePath -> Eff es ()
removeDirectoryLink :: FilePath -> Eff es ()
removeDirectoryLink = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO ()
D.removeDirectoryLink
pathIsSymbolicLink :: FileSystem :> es => FilePath -> Eff es Bool
pathIsSymbolicLink :: FilePath -> Eff es Bool
pathIsSymbolicLink = IO Bool -> Eff es Bool
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO Bool -> Eff es Bool)
-> (FilePath -> IO Bool) -> FilePath -> Eff es Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO Bool
D.pathIsSymbolicLink
getSymbolicLinkTarget :: FileSystem :> es => FilePath -> Eff es FilePath
getSymbolicLinkTarget :: FilePath -> Eff es FilePath
getSymbolicLinkTarget = IO FilePath -> Eff es FilePath
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO FilePath -> Eff es FilePath)
-> (FilePath -> IO FilePath) -> FilePath -> Eff es FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO FilePath
D.getSymbolicLinkTarget
getPermissions :: FileSystem :> es => FilePath -> Eff es D.Permissions
getPermissions :: FilePath -> Eff es Permissions
getPermissions = IO Permissions -> Eff es Permissions
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO Permissions -> Eff es Permissions)
-> (FilePath -> IO Permissions) -> FilePath -> Eff es Permissions
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO Permissions
D.getPermissions
setPermissions :: FileSystem :> es => FilePath -> D.Permissions -> Eff es ()
setPermissions :: FilePath -> Permissions -> Eff es ()
setPermissions FilePath
path = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (Permissions -> IO ()) -> Permissions -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> Permissions -> IO ()
D.setPermissions FilePath
path
copyPermissions :: FileSystem :> es => FilePath -> FilePath -> Eff es ()
copyPermissions :: FilePath -> FilePath -> Eff es ()
copyPermissions FilePath
src = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ())
-> (FilePath -> IO ()) -> FilePath -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> FilePath -> IO ()
D.copyPermissions FilePath
src
getAccessTime :: FileSystem :> es => FilePath -> Eff es UTCTime
getAccessTime :: FilePath -> Eff es UTCTime
getAccessTime = IO UTCTime -> Eff es UTCTime
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO UTCTime -> Eff es UTCTime)
-> (FilePath -> IO UTCTime) -> FilePath -> Eff es UTCTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO UTCTime
D.getAccessTime
getModificationTime :: FileSystem :> es => FilePath -> Eff es UTCTime
getModificationTime :: FilePath -> Eff es UTCTime
getModificationTime = IO UTCTime -> Eff es UTCTime
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO UTCTime -> Eff es UTCTime)
-> (FilePath -> IO UTCTime) -> FilePath -> Eff es UTCTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO UTCTime
D.getModificationTime
setAccessTime :: FileSystem :> es => FilePath -> UTCTime -> Eff es ()
setAccessTime :: FilePath -> UTCTime -> Eff es ()
setAccessTime FilePath
path = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ()) -> (UTCTime -> IO ()) -> UTCTime -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> UTCTime -> IO ()
D.setAccessTime FilePath
path
setModificationTime :: FileSystem :> es => FilePath -> UTCTime -> Eff es ()
setModificationTime :: FilePath -> UTCTime -> Eff es ()
setModificationTime FilePath
path = IO () -> Eff es ()
forall a (es :: [Effect]). IO a -> Eff es a
unsafeEff_ (IO () -> Eff es ()) -> (UTCTime -> IO ()) -> UTCTime -> Eff es ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> UTCTime -> IO ()
D.setModificationTime FilePath
path