extra-1.8: Extra functions I use.
Safe HaskellNone
LanguageHaskell2010

System.Directory.Extra

Description

Extra directory functions. Most of these functions provide cleaned up and generalised versions of getDirectoryContents, see listContents for the differences.

Synopsis

Documentation

data Permissions #

Instances

Instances details
Read Permissions 
Instance details

Defined in System.Directory.Internal.Common

Show Permissions 
Instance details

Defined in System.Directory.Internal.Common

Methods

showsPrec :: Int -> Permissions -> ShowS

show :: Permissions -> String

showList :: [Permissions] -> ShowS

Eq Permissions 
Instance details

Defined in System.Directory.Internal.Common

Methods

(==) :: Permissions -> Permissions -> Bool

(/=) :: Permissions -> Permissions -> Bool

Ord Permissions 
Instance details

Defined in System.Directory.Internal.Common

data XdgDirectory #

Instances

Instances details
Bounded XdgDirectory 
Instance details

Defined in System.Directory.Internal.Common

Enum XdgDirectory 
Instance details

Defined in System.Directory.Internal.Common

Read XdgDirectory 
Instance details

Defined in System.Directory.Internal.Common

Show XdgDirectory 
Instance details

Defined in System.Directory.Internal.Common

Methods

showsPrec :: Int -> XdgDirectory -> ShowS

show :: XdgDirectory -> String

showList :: [XdgDirectory] -> ShowS

Eq XdgDirectory 
Instance details

Defined in System.Directory.Internal.Common

Methods

(==) :: XdgDirectory -> XdgDirectory -> Bool

(/=) :: XdgDirectory -> XdgDirectory -> Bool

Ord XdgDirectory 
Instance details

Defined in System.Directory.Internal.Common

data XdgDirectoryList #

Constructors

XdgDataDirs 
XdgConfigDirs 

Instances

Instances details
Bounded XdgDirectoryList 
Instance details

Defined in System.Directory.Internal.Common

Enum XdgDirectoryList 
Instance details

Defined in System.Directory.Internal.Common

Read XdgDirectoryList 
Instance details

Defined in System.Directory.Internal.Common

Show XdgDirectoryList 
Instance details

Defined in System.Directory.Internal.Common

Methods

showsPrec :: Int -> XdgDirectoryList -> ShowS

show :: XdgDirectoryList -> String

showList :: [XdgDirectoryList] -> ShowS

Eq XdgDirectoryList 
Instance details

Defined in System.Directory.Internal.Common

Ord XdgDirectoryList 
Instance details

Defined in System.Directory.Internal.Common

exeExtension :: String #

findExecutable :: String -> IO (Maybe FilePath) #

findExecutables :: String -> IO [FilePath] #

findFileWith :: (FilePath -> IO Bool) -> [FilePath] -> String -> IO (Maybe FilePath) #

findFilesWith :: (FilePath -> IO Bool) -> [FilePath] -> String -> IO [FilePath] #

getAccessTime :: FilePath -> IO UTCTime #

getFileSize :: FilePath -> IO Integer #

setAccessTime :: FilePath -> UTCTime -> IO () #

setModificationTime :: FilePath -> UTCTime -> IO () #

findFile :: [FilePath] -> String -> IO (Maybe FilePath) #

findFiles :: [FilePath] -> String -> IO [FilePath] #

createDirectoryPrivate :: String -> IO () Source #

Create a directory with permissions so that only the current user can view it. On Windows this function is equivalent to createDirectory.

listContents :: FilePath -> IO [FilePath] Source #

List the files and directories directly within a directory. Each result will be prefixed by the query directory, and the special directories . and .. will be ignored. Intended as a cleaned up version of getDirectoryContents.

withTempDir $ \dir -> do writeFile (dir </> "test.txt") ""; (== [dir </> "test.txt"]) <$> listContents dir
let touch = mapM_ $ \x -> createDirectoryIfMissing True (takeDirectory x) >> writeFile x ""
let listTest op as bs = withTempDir $ \dir -> do touch $ map (dir </>) as; res <- op dir; pure $ map (drop (length dir + 1)) res == bs
listTest listContents ["bar.txt","foo/baz.txt","zoo"] ["bar.txt","foo","zoo"]

listDirectories :: FilePath -> IO [FilePath] Source #

Like listContents, but only returns the directories in a directory, not the files. Each directory will be prefixed by the query directory.

listTest listDirectories ["bar.txt","foo/baz.txt","zoo"] ["foo"]

listFiles :: FilePath -> IO [FilePath] Source #

Like listContents, but only returns the files in a directory, not other directories. Each file will be prefixed by the query directory.

listTest listFiles ["bar.txt","foo/baz.txt","zoo"] ["bar.txt","zoo"]

listFilesInside :: (FilePath -> IO Bool) -> FilePath -> IO [FilePath] Source #

Like listFilesRecursive, but with a predicate to decide where to recurse into. Typically directories starting with . would be ignored. The initial argument directory will have the test applied to it.

listTest (listFilesInside $ pure . not . isPrefixOf "." . takeFileName)
    ["bar.txt","foo" </> "baz.txt",".foo" </> "baz2.txt", "zoo"] ["bar.txt","zoo","foo" </> "baz.txt"]
listTest (listFilesInside $ const $ pure False) ["bar.txt"] []

listFilesRecursive :: FilePath -> IO [FilePath] Source #

Like listFiles, but goes recursively through all subdirectories. This function will follow symlinks, and if they form a loop, this function will not terminate.

listTest listFilesRecursive ["bar.txt","zoo","foo" </> "baz.txt"] ["bar.txt","zoo","foo" </> "baz.txt"]