-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Library for representing and manipulating type-safe file paths -- -- This library provides a more type-safe version of FilePaths -- together with thin wrappers around common IO operations. -- -- This library is directly derived from hackage-security's -- Hackage.Security.Util.Path module. @package paths @version 0.1 -- | A more type-safe version of file paths -- -- This module provides the basic Path abstraction. See also -- System.Path.IO which extends this module by thin wrappers -- wrappers around common IO operations. module System.Path -- | Paths -- -- A Path is simply a FilePath with a type-level tag -- indicating where this path is rooted (relative to the current -- directory, absolute path, relative to a web domain, whatever). Most -- operations on Path are just lifted versions of the operations -- on the underlying FilePath. The tag however allows us to give a -- lot of operations a more meaningful type. For instance, it does not -- make sense to append two absolute paths together; instead, we can only -- append an unrooted path to another path. It also means we avoid bugs -- where we use one kind of path where we expect another. newtype Path a Path :: FilePath -> Path a -- | Reinterpret the root of a path -- -- This literally just changes the type-level tag; use with caution! castRoot :: Path root -> Path root' -- | Wrapped takeDirectory takeDirectory :: Path a -> Path a -- | Wrapped takeFileName takeFileName :: Path a -> String -- | Wrapped <.> (<.>) :: Path a -> String -> Path a -- | Wrapped splitExtension splitExtension :: Path a -> (Path a, String) -- | Wrapped takeExtension takeExtension :: Path a -> String -- | Type-level tag for unrooted paths -- -- Unrooted paths need a root before they can be interpreted. data Unrooted -- | Wrapped </> (>) :: Path a -> Path Unrooted -> Path a -- | Reinterpret an unrooted path -- -- This is an alias for castRoot; see comments there. rootPath :: Path Unrooted -> Path root -- | Forget a path's root -- -- This is an alias for castRoot; see comments there. unrootPath :: Path root -> Path Unrooted -- | Convert a relative/unrooted Path to a FilePath (using POSIX style -- directory separators). -- -- See also toAbsoluteFilePath toUnrootedFilePath :: Path Unrooted -> FilePath -- | Convert from a relative/unrooted FilePath (using POSIX style directory -- separators). fromUnrootedFilePath :: FilePath -> Path Unrooted -- | A path fragment (like a single directory or filename) fragment :: String -> Path Unrooted -- | Wrapped joinPath joinFragments :: [String] -> Path Unrooted -- | Wrapped splitDirectories splitFragments :: Path Unrooted -> [String] -- | A file system root can be interpreted as an (absolute) FilePath class FsRoot root -- | Convert a Path to an absolute FilePath (using native style directory -- separators). toAbsoluteFilePath :: FsRoot root => Path root -> IO FilePath -- | Abstract over a file system root -- -- see fromFilePath data FsPath FsPath :: (Path root) -> FsPath data Relative data Absolute data HomeDir toFilePath :: Path Absolute -> FilePath fromFilePath :: FilePath -> FsPath makeAbsolute :: FsPath -> IO (Path Absolute) fromAbsoluteFilePath :: FilePath -> Path Absolute instance GHC.Classes.Ord (System.Path.Path a) instance GHC.Classes.Eq (System.Path.Path a) instance GHC.Show.Show (System.Path.Path a) instance Control.DeepSeq.NFData (System.Path.Path a) instance System.Path.FsRoot System.Path.Relative instance System.Path.FsRoot System.Path.Absolute instance System.Path.FsRoot System.Path.HomeDir instance Control.DeepSeq.NFData System.Path.FsPath -- | This module extends System.Path (which is re-exported for -- convenience) with thin wrappers around common IO functions and is -- intended to replace imports of System.FilePath, -- -- To facilitate importing this module unqualified we also re-export some -- definitions from System.IO (importing both would likely lead to -- name clashes). module System.Path.IO -- | Wrapper around withFile withFile :: FsRoot root => Path root -> IOMode -> (Handle -> IO r) -> IO r -- | Wrapper around openBinaryTempFileWithDefaultPermissions -- -- NOTE: The caller is responsible for cleaning up the temporary file. openTempFile' :: FsRoot root => Path root -> String -> IO (Path Absolute, Handle) readLazyByteString :: FsRoot root => Path root -> IO ByteString readStrictByteString :: FsRoot root => Path root -> IO ByteString writeLazyByteString :: FsRoot root => Path root -> ByteString -> IO () writeStrictByteString :: FsRoot root => Path root -> ByteString -> IO () copyFile :: (FsRoot root, FsRoot root') => Path root -> Path root' -> IO () createDirectory :: FsRoot root => Path root -> IO () createDirectoryIfMissing :: FsRoot root => Bool -> Path root -> IO () removeDirectory :: FsRoot root => Path root -> IO () doesFileExist :: FsRoot root => Path root -> IO Bool doesDirectoryExist :: FsRoot root => Path root -> IO Bool getModificationTime :: FsRoot root => Path root -> IO UTCTime removeFile :: FsRoot root => Path root -> IO () getTemporaryDirectory :: IO (Path Absolute) -- | Return the immediate children of a directory -- -- Filters out "." and "..". getDirectoryContents :: FsRoot root => Path root -> IO [Path Unrooted] -- | Recursive traverse a directory structure -- -- Returns a set of paths relative to the directory specified. The list -- is lazily constructed, so that directories are only read when -- required. (This is also essential to ensure that this function does -- not build the entire result in memory before returning, potentially -- running out of heap.) getRecursiveContents :: FsRoot root => Path root -> IO [Path Unrooted] renameFile :: (FsRoot root, FsRoot root') => Path root -> Path root' -> IO () getCurrentDirectory :: IO (Path Absolute) -- | See openFile data IOMode :: * ReadMode :: IOMode WriteMode :: IOMode AppendMode :: IOMode ReadWriteMode :: IOMode -- | Three kinds of buffering are supported: line-buffering, -- block-buffering or no-buffering. These modes have the following -- effects. For output, items are written out, or flushed, from -- the internal buffer according to the buffer mode: -- --