Safe Haskell | None |
---|---|
Language | Haskell2010 |
Development.Shake.FilePath
Description
A module for FilePath
operations exposing System.FilePath plus some additional operations.
Windows note: The extension methods (<.>
, takeExtension
etc) use the Posix variants since on
Windows "//*"
produces <.>
"txt""//*\\.txt"
(which is bad for FilePattern
values).
Synopsis
- type FilePath = String
- takeDirectory :: FilePath -> FilePath
- isPathSeparator :: Char -> Bool
- (</>) :: FilePath -> FilePath -> FilePath
- isRelative :: FilePath -> Bool
- takeDrive :: FilePath -> FilePath
- makeRelative :: FilePath -> FilePath -> FilePath
- (-<.>) :: FilePath -> String -> FilePath
- addTrailingPathSeparator :: FilePath -> FilePath
- combine :: FilePath -> FilePath -> FilePath
- dropDrive :: FilePath -> FilePath
- dropFileName :: FilePath -> FilePath
- dropTrailingPathSeparator :: FilePath -> FilePath
- equalFilePath :: FilePath -> FilePath -> Bool
- extSeparator :: Char
- getSearchPath :: IO [FilePath]
- hasDrive :: FilePath -> Bool
- hasTrailingPathSeparator :: FilePath -> Bool
- isAbsolute :: FilePath -> Bool
- isDrive :: FilePath -> Bool
- isExtSeparator :: Char -> Bool
- isExtensionOf :: String -> FilePath -> Bool
- isSearchPathSeparator :: Char -> Bool
- isValid :: FilePath -> Bool
- joinDrive :: FilePath -> FilePath -> FilePath
- joinPath :: [FilePath] -> FilePath
- makeValid :: FilePath -> FilePath
- normalise :: FilePath -> FilePath
- pathSeparator :: Char
- pathSeparators :: [Char]
- replaceBaseName :: FilePath -> String -> FilePath
- replaceDirectory :: FilePath -> String -> FilePath
- replaceExtensions :: FilePath -> String -> FilePath
- replaceFileName :: FilePath -> String -> FilePath
- searchPathSeparator :: Char
- splitDirectories :: FilePath -> [FilePath]
- splitDrive :: FilePath -> (FilePath, FilePath)
- splitFileName :: FilePath -> (String, String)
- splitPath :: FilePath -> [FilePath]
- splitSearchPath :: String -> [FilePath]
- stripExtension :: String -> FilePath -> Maybe FilePath
- takeBaseName :: FilePath -> String
- takeFileName :: FilePath -> FilePath
- splitExtension :: FilePath -> (String, String)
- takeExtension :: FilePath -> String
- replaceExtension :: FilePath -> String -> FilePath
- dropExtension :: FilePath -> FilePath
- addExtension :: FilePath -> String -> FilePath
- hasExtension :: FilePath -> Bool
- (<.>) :: FilePath -> String -> FilePath
- splitExtensions :: FilePath -> (FilePath, String)
- takeExtensions :: FilePath -> String
- dropExtensions :: FilePath -> FilePath
- dropDirectory1 :: FilePath -> FilePath
- takeDirectory1 :: FilePath -> FilePath
- replaceDirectory1 :: FilePath -> String -> FilePath
- makeRelativeEx :: FilePath -> FilePath -> IO (Maybe FilePath)
- normaliseEx :: FilePath -> FilePath
- toNative :: FilePath -> FilePath
- toStandard :: FilePath -> FilePath
- exe :: String
Documentation
takeDirectory :: FilePath -> FilePath #
isPathSeparator :: Char -> Bool #
isRelative :: FilePath -> Bool #
makeRelative :: FilePath -> FilePath -> FilePath #
dropFileName :: FilePath -> FilePath #
equalFilePath :: FilePath -> FilePath -> Bool #
extSeparator :: Char #
getSearchPath :: IO [FilePath] #
hasTrailingPathSeparator :: FilePath -> Bool #
isAbsolute :: FilePath -> Bool #
isExtSeparator :: Char -> Bool #
isExtensionOf :: String -> FilePath -> Bool #
isSearchPathSeparator :: Char -> Bool #
pathSeparator :: Char #
pathSeparators :: [Char] #
replaceBaseName :: FilePath -> String -> FilePath #
replaceDirectory :: FilePath -> String -> FilePath #
replaceExtensions :: FilePath -> String -> FilePath #
replaceFileName :: FilePath -> String -> FilePath #
searchPathSeparator :: Char #
splitDirectories :: FilePath -> [FilePath] #
splitDrive :: FilePath -> (FilePath, FilePath) #
splitFileName :: FilePath -> (String, String) #
splitSearchPath :: String -> [FilePath] #
stripExtension :: String -> FilePath -> Maybe FilePath #
takeBaseName :: FilePath -> String #
takeFileName :: FilePath -> FilePath #
splitExtension :: FilePath -> (String, String) #
takeExtension :: FilePath -> String #
replaceExtension :: FilePath -> String -> FilePath #
dropExtension :: FilePath -> FilePath #
addExtension :: FilePath -> String -> FilePath #
hasExtension :: FilePath -> Bool #
splitExtensions :: FilePath -> (FilePath, String) #
takeExtensions :: FilePath -> String #
dropExtensions :: FilePath -> FilePath #
dropDirectory1 :: FilePath -> FilePath Source #
Drop the first directory from a FilePath
. Should only be used on
relative paths.
dropDirectory1 "aaa/bbb" == "bbb" dropDirectory1 "aaa/" == "" dropDirectory1 "aaa" == "" dropDirectory1 "" == ""
takeDirectory1 :: FilePath -> FilePath Source #
Take the first component of a FilePath
. Should only be used on
relative paths.
takeDirectory1 "aaa/bbb" == "aaa" takeDirectory1 "aaa/" == "aaa" takeDirectory1 "aaa" == "aaa"
replaceDirectory1 :: FilePath -> String -> FilePath Source #
Replace the first component of a FilePath
. Should only be used on
relative paths.
replaceDirectory1 "root/file.ext" "directory" == "directory/file.ext" replaceDirectory1 "root/foo/bar/file.ext" "directory" == "directory/foo/bar/file.ext"
makeRelativeEx :: FilePath -> FilePath -> IO (Maybe FilePath) Source #
Make a path relative. Returns Nothing only when the given paths are on different drives. This will try the pure function makeRelative first. If that fails, the paths are canonicalised (removing any indirection and symlinks) and a relative path is derived from there.
> -- Given that "/root/a/" is not a symlink > makeRelativeEx "/root/a/" "/root/b/file.out" Just "../b/file.out" > -- Given that "/root/c/" is a symlink to "/root/e/f/g/" > makeRelativeEx "/root/c/" "/root/b/file.out" Just "../../../b/file.out" > -- On Windows > makeRelativeEx "C:\\foo" "D:\\foo\\bar" Nothing
normaliseEx :: FilePath -> FilePath Source #
Normalise a FilePath
, applying the rules:
- All
pathSeparators
becomepathSeparator
(/
on Linux,\
on Windows) foo/bar/../baz
becomesfoo/baz
(not universally true in the presence of symlinks)foo/./bar
becomesfoo/bar
foo//bar
becomesfoo/bar
This function is not based on the normalise
function from the filepath
library, as that function
is quite broken.
toStandard :: FilePath -> FilePath Source #
Convert all path separators to /
, even on Windows.