template-haskell-2.24.0.0: vendored-filepath/System/FilePath.hs
-- Vendored from filepath v1.4.2.2
{-# LANGUAGE CPP #-}
{-# LANGUAGE Safe #-}
{- |
Module : System.FilePath
Copyright : (c) Neil Mitchell 2005-2014
License : BSD3
Maintainer : ndmitchell@gmail.com
Stability : stable
Portability : portable
A library for 'FilePath' manipulations, using Posix or Windows filepaths
depending on the platform.
Both "System.FilePath.Posix" and "System.FilePath.Windows" provide the
same interface.
Given the example 'FilePath': @\/directory\/file.ext@
We can use the following functions to extract pieces.
* 'takeFileName' gives @\"file.ext\"@
* 'takeDirectory' gives @\"\/directory\"@
* 'takeExtension' gives @\".ext\"@
* 'dropExtension' gives @\"\/directory\/file\"@
* 'takeBaseName' gives @\"file\"@
And we could have built an equivalent path with the following expressions:
* @\"\/directory\" '</>' \"file.ext\"@.
* @\"\/directory\/file" '<.>' \"ext\"@.
* @\"\/directory\/file.txt" '-<.>' \"ext\"@.
Each function in this module is documented with several examples,
which are also used as tests.
Here are a few examples of using the @filepath@ functions together:
/Example 1:/ Find the possible locations of a Haskell module @Test@ imported from module @Main@:
@['replaceFileName' path_to_main \"Test\" '<.>' ext | ext <- [\"hs\",\"lhs\"] ]@
/Example 2:/ Download a file from @url@ and save it to disk:
@do let file = 'makeValid' url
System.Directory.createDirectoryIfMissing True ('takeDirectory' file)@
/Example 3:/ Compile a Haskell file, putting the @.hi@ file under @interface@:
@'takeDirectory' file '</>' \"interface\" '</>' ('takeFileName' file '-<.>' \"hi\")@
References:
[1] <http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx Naming Files, Paths and Namespaces> (Microsoft MSDN)
-}
#if defined(mingw32_HOST_OS) || defined(__MINGW32__)
module System.FilePath(
-- * Separator predicates
FilePath,
pathSeparator, pathSeparators, isPathSeparator,
searchPathSeparator, isSearchPathSeparator,
extSeparator, isExtSeparator,
-- * @$PATH@ methods
splitSearchPath, getSearchPath,
-- * Extension functions
splitExtension,
takeExtension, replaceExtension, (-<.>), dropExtension, addExtension, hasExtension, (<.>),
splitExtensions, dropExtensions, takeExtensions, replaceExtensions, isExtensionOf,
stripExtension,
-- * Filename\/directory functions
splitFileName,
takeFileName, replaceFileName, dropFileName,
takeBaseName, replaceBaseName,
takeDirectory, replaceDirectory,
combine, (</>),
splitPath, joinPath, splitDirectories,
-- * Drive functions
splitDrive, joinDrive,
takeDrive, hasDrive, dropDrive, isDrive,
-- * Trailing slash functions
hasTrailingPathSeparator,
addTrailingPathSeparator,
dropTrailingPathSeparator,
-- * File name manipulations
normalise, equalFilePath,
makeRelative,
isRelative, isAbsolute,
isValid, makeValid
) where
import System.FilePath.Windows
#else
module System.FilePath(
-- * Separator predicates
FilePath,
pathSeparator, pathSeparators, isPathSeparator,
searchPathSeparator, isSearchPathSeparator,
extSeparator, isExtSeparator,
-- * @$PATH@ methods
splitSearchPath, getSearchPath,
-- * Extension functions
splitExtension,
takeExtension, replaceExtension, (-<.>), dropExtension, addExtension, hasExtension, (<.>),
splitExtensions, dropExtensions, takeExtensions, replaceExtensions, isExtensionOf,
stripExtension,
-- * Filename\/directory functions
splitFileName,
takeFileName, replaceFileName, dropFileName,
takeBaseName, replaceBaseName,
takeDirectory, replaceDirectory,
combine, (</>),
splitPath, joinPath, splitDirectories,
-- * Drive functions
splitDrive, joinDrive,
takeDrive, hasDrive, dropDrive, isDrive,
-- * Trailing slash functions
hasTrailingPathSeparator,
addTrailingPathSeparator,
dropTrailingPathSeparator,
-- * File name manipulations
normalise, equalFilePath,
makeRelative,
isRelative, isAbsolute,
isValid, makeValid
) where
import System.FilePath.Posix
#endif