-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Alternative to 'directory' package with ByteString based filepaths -- -- This provides a safer alternative to the directory package. -- FilePaths are ByteString based, so this package only works on POSIX -- systems. For a more high-level version of this with proper Path type, -- use 'hpath-io', which makes use of this package. @package hpath-directory @version 0.14.2 -- | Provides error handling. module System.Posix.RawFilePath.Directory.Errors -- | Additional generic IO exceptions that the posix functions do not -- provide. data HPathIOException SameFile :: ByteString -> ByteString -> HPathIOException DestinationInSource :: ByteString -> ByteString -> HPathIOException RecursiveFailure :: [(RecursiveFailureHint, IOException)] -> HPathIOException -- | A type for giving failure hints on recursive failure, which allows to -- programmatically make choices without examining the weakly typed I/O -- error attributes (like ioeGetFileName). -- -- The first argument to the data constructor is always the source and -- the second the destination. data RecursiveFailureHint ReadContentsFailed :: ByteString -> ByteString -> RecursiveFailureHint CreateDirFailed :: ByteString -> ByteString -> RecursiveFailureHint CopyFileFailed :: ByteString -> ByteString -> RecursiveFailureHint RecreateSymlinkFailed :: ByteString -> ByteString -> RecursiveFailureHint isSameFile :: HPathIOException -> Bool isDestinationInSource :: HPathIOException -> Bool isRecursiveFailure :: HPathIOException -> Bool isReadContentsFailed :: RecursiveFailureHint -> Bool isCreateDirFailed :: RecursiveFailureHint -> Bool isCopyFileFailed :: RecursiveFailureHint -> Bool isRecreateSymlinkFailed :: RecursiveFailureHint -> Bool -- | Throws AlreadyExists IOError if file exists. throwFileDoesExist :: RawFilePath -> IO () -- | Throws AlreadyExists IOError if directory exists. throwDirDoesExist :: RawFilePath -> IO () -- | Uses isSameFile and throws SameFile if it returns True. throwSameFile :: RawFilePath -> RawFilePath -> IO () -- | Check if the files are the same by examining device and file id. This -- follows symbolic links. sameFile :: RawFilePath -> RawFilePath -> IO Bool -- | Checks whether the destination directory is contained within the -- source directory by comparing the device+file ID of the source -- directory with all device+file IDs of the parent directories of the -- destination. throwDestinationInSource :: RawFilePath -> RawFilePath -> IO () -- | Carries out an action, then checks if there is an IOException and a -- specific errno. If so, then it carries out another action, otherwise -- it rethrows the error. catchErrno :: [Errno] -> IO a -> IO a -> IO a -- | Execute the given action and retrow IO exceptions as a new Exception -- that have the given errno. If errno does not match the exception is -- rethrown as is. rethrowErrnoAs :: Exception e => [Errno] -> e -> IO a -> IO a -- | Like catchIOError, with arguments swapped. handleIOError :: (IOError -> IO a) -> IO a -> IO a hideError :: IOErrorType -> IO () -> IO () -- | Like bracket, but allows to have different clean-up actions -- depending on whether the in-between computation has raised an -- exception or not. bracketeer :: IO a -> (a -> IO b) -> (a -> IO b) -> (a -> IO c) -> IO c reactOnError :: IO a -> [(IOErrorType, IO a)] -> [(HPathIOException, IO a)] -> IO a instance GHC.Show.Show System.Posix.RawFilePath.Directory.Errors.RecursiveFailureHint instance GHC.Classes.Eq System.Posix.RawFilePath.Directory.Errors.RecursiveFailureHint instance GHC.Show.Show System.Posix.RawFilePath.Directory.Errors.HPathIOException instance GHC.Classes.Eq System.Posix.RawFilePath.Directory.Errors.HPathIOException instance GHC.Exception.Type.Exception System.Posix.RawFilePath.Directory.Errors.HPathIOException -- | This module provides IO related file operations like copy, delete, -- move and so on, similar to the directory package. -- -- Some of these operations are due to their nature not atomic, -- which means they may do multiple syscalls which form one context. Some -- of them also have to examine the filetypes explicitly before the -- syscalls, so a reasonable decision can be made. That means the result -- is undefined if another process changes that context while the -- non-atomic operation is still happening. However, where possible, as -- few syscalls as possible are used and the underlying exception -- handling is kept. -- -- Note: BlockDevice, CharacterDevice, NamedPipe and -- Socket are ignored by some of the more high-level functions -- (like easyCopy). For other functions (like copyFile), -- the behavior on these file types is unreliable/unsafe. Check the -- documentation of those functions for details. -- -- Import as: > import System.Posix.RawFilePath.Directory module System.Posix.RawFilePath.Directory data FileType Directory :: FileType RegularFile :: FileType SymbolicLink :: FileType BlockDevice :: FileType CharacterDevice :: FileType NamedPipe :: FileType Socket :: FileType -- | The error mode for recursive operations. -- -- On FailEarly the whole operation fails immediately if any of -- the recursive sub-operations fail, which is sort of the default for IO -- operations. -- -- On CollectFailures skips errors in the recursion and keeps on -- recursing. However all errors are collected in the -- RecursiveFailure error type, which is raised finally if there -- was any error. Also note that RecursiveFailure does not give -- any guarantees on the ordering of the collected exceptions. data RecursiveErrorMode FailEarly :: RecursiveErrorMode CollectFailures :: RecursiveErrorMode -- | The mode for copy and file moves. Overwrite mode is usually not very -- well defined, but is a convenience shortcut. data CopyMode -- | fail if any target exists Strict :: CopyMode -- | overwrite targets Overwrite :: CopyMode -- | Copies the contents of a directory recursively to the given -- destination, while preserving permissions. Does not follow symbolic -- links. This behaves more or less like the following, without -- descending into the destination if it already exists: -- --
--   cp -a /source/dir /destination/somedir
--   
-- -- For directory contents, this will ignore any file type that is not -- RegularFile, SymbolicLink or Directory. -- -- For Overwrite copy mode this does not prune destination -- directory contents, so the destination might contain more files than -- the source after the operation has completed. Permissions of existing -- directories are fixed. -- -- Safety/reliability concerns: -- -- -- -- Throws: -- -- -- -- Throws in FailEarly RecursiveErrorMode only: -- -- -- -- Throws in CollectFailures RecursiveErrorMode only: -- -- -- -- Throws in Strict CopyMode only: -- -- copyDirRecursive :: RawFilePath -> RawFilePath -> CopyMode -> RecursiveErrorMode -> IO () -- | Recreate a symlink. -- -- In Overwrite copy mode only files and empty directories are -- deleted. -- -- Safety/reliability concerns: -- -- -- -- Throws: -- -- -- -- Throws in Strict mode only: -- -- -- -- Throws in Overwrite mode only: -- -- -- -- Notes: -- -- recreateSymlink :: RawFilePath -> RawFilePath -> CopyMode -> IO () -- | Copies the given regular file to the given destination. Neither -- follows symbolic links, nor accepts them. For "copying" symbolic -- links, use recreateSymlink instead. -- -- Note that this is still sort of a low-level function and doesn't -- examine file types. For a more high-level version, use easyCopy -- instead. -- -- In Overwrite copy mode only overwrites actual files, not -- directories. In Strict mode the destination file must not -- exist. -- -- Safety/reliability concerns: -- -- -- -- Throws: -- -- -- -- Throws in Strict mode only: -- -- copyFile :: RawFilePath -> RawFilePath -> CopyMode -> IO () -- | Copies a regular file, directory or symbolic link. In case of a -- symbolic link it is just recreated, even if it points to a directory. -- Any other file type is ignored. -- -- Safety/reliability concerns: -- -- easyCopy :: RawFilePath -> RawFilePath -> CopyMode -> RecursiveErrorMode -> IO () -- | Deletes the given file. Raises eISDIR if run on a directory. -- Does not follow symbolic links. -- -- Throws: -- -- -- -- Notes: calls unlink deleteFile :: RawFilePath -> IO () -- | Deletes the given directory, which must be empty, never symlinks. -- -- Throws: -- -- -- -- Notes: calls rmdir deleteDir :: RawFilePath -> IO () -- | Deletes the given directory recursively. Does not follow symbolic -- links. Tries deleteDir first before attemtping a recursive -- deletion. -- -- On directory contents this behaves like easyDelete and thus -- will ignore any file type that is not RegularFile, -- SymbolicLink or Directory. -- -- Safety/reliability concerns: -- -- -- -- Throws: -- -- deleteDirRecursive :: RawFilePath -> IO () -- | Deletes a file, directory or symlink. In case of directory, performs -- recursive deletion. In case of a symlink, the symlink file is deleted. -- Any other file type is ignored. -- -- Safety/reliability concerns: -- -- easyDelete :: RawFilePath -> IO () -- | Opens a file appropriately by invoking xdg-open. The file type is not -- checked. This forks a process. openFile :: RawFilePath -> IO ProcessID -- | Executes a program with the given arguments. This forks a process. executeFile :: RawFilePath -> [ByteString] -> IO ProcessID -- | Create an empty regular file at the given directory with the given -- filename. -- -- Throws: -- -- createRegularFile :: FileMode -> RawFilePath -> IO () -- | Create an empty directory at the given directory with the given -- filename. -- -- Throws: -- -- createDir :: FileMode -> RawFilePath -> IO () -- | Create an empty directory at the given directory with the given -- filename. -- -- Throws: -- -- createDirIfMissing :: FileMode -> RawFilePath -> IO () -- | Create an empty directory at the given directory with the given -- filename. All parent directories are created with the same filemode. -- This basically behaves like: -- --
--   mkdir -p /some/dir
--   
-- -- Safety/reliability concerns: -- -- -- -- Throws: -- -- createDirRecursive :: FileMode -> RawFilePath -> IO () -- | Create a symlink. -- -- Throws: -- -- -- -- Note: calls symlink createSymlink :: RawFilePath -> RawFilePath -> IO () -- | Rename a given file with the provided filename. Destination and source -- must be on the same device, otherwise eXDEV will be raised. -- -- Does not follow symbolic links, but renames the symbolic link file. -- -- Safety/reliability concerns: -- -- -- -- Throws: -- -- -- -- Note: calls rename (but does not allow to rename over existing -- files) renameFile :: RawFilePath -> RawFilePath -> IO () -- | Move a file. This also works across devices by copy-delete fallback. -- And also works on directories. -- -- Does not follow symbolic links, but renames the symbolic link file. -- -- Safety/reliability concerns: -- -- -- -- Throws: -- -- -- -- Throws in Strict mode only: -- -- -- -- Notes: -- -- moveFile :: RawFilePath -> RawFilePath -> CopyMode -> IO () -- | Read the given file lazily. -- -- Symbolic links are followed. File must exist. -- -- Throws: -- -- readFile :: RawFilePath -> IO ByteString -- | Read the given file strictly into memory. -- -- Symbolic links are followed. File must exist. -- -- Throws: -- -- readFileStrict :: RawFilePath -> IO ByteString -- | Open the given file as a filestream. Once the filestream exits, the -- filehandle is cleaned up. -- -- Throws: -- -- readFileStream :: RawFilePath -> IO (SerialT IO (Array Word8)) -- | Write a given ByteString to a file, truncating the file beforehand. -- Follows symlinks. -- -- Throws: -- -- writeFile :: RawFilePath -> Maybe FileMode -> ByteString -> IO () -- | Write a given lazy ByteString to a file, truncating the file -- beforehand. Follows symlinks. -- -- Throws: -- -- -- -- Note: uses streamly under the hood writeFileL :: RawFilePath -> Maybe FileMode -> ByteString -> IO () -- | Append a given ByteString to a file. The file must exist. Follows -- symlinks. -- -- Throws: -- -- appendFile :: RawFilePath -> ByteString -> IO () -- | Default permissions for a new file. newFilePerms :: FileMode -- | Default permissions for a new directory. newDirPerms :: FileMode -- | Checks if the given file exists. Does not follow symlinks. -- -- Only eNOENT is catched (and returns False). doesExist :: RawFilePath -> IO Bool -- | Checks if the given file exists and is not a directory. Does not -- follow symlinks. -- -- Only eNOENT is catched (and returns False). doesFileExist :: RawFilePath -> IO Bool -- | Checks if the given file exists and is a directory. Does not follow -- symlinks. -- -- Only eNOENT is catched (and returns False). doesDirectoryExist :: RawFilePath -> IO Bool -- | Checks whether a file or folder is readable. -- -- Only eACCES, eROFS, eTXTBSY, ePERM are catched (and return False). -- -- Throws: -- -- isReadable :: RawFilePath -> IO Bool -- | Checks whether a file or folder is writable. -- -- Only eACCES, eROFS, eTXTBSY, ePERM are catched (and return False). -- -- Throws: -- -- isWritable :: RawFilePath -> IO Bool -- | Checks whether a file or folder is executable. -- -- Only eACCES, eROFS, eTXTBSY, ePERM are catched (and return False). -- -- Throws: -- -- isExecutable :: RawFilePath -> IO Bool -- | Checks whether the directory at the given path exists and can be -- opened. This invokes openDirStream which follows symlinks. canOpenDirectory :: RawFilePath -> IO Bool getModificationTime :: RawFilePath -> IO UTCTime setModificationTime :: RawFilePath -> EpochTime -> IO () setModificationTimeHiRes :: RawFilePath -> POSIXTime -> IO () -- | Gets all filenames of the given directory. This excludes "." and "..". -- This version does not follow symbolic links. -- -- The contents are not sorted and there is no guarantee on the ordering. -- -- Throws: -- -- getDirsFiles :: RawFilePath -> IO [RawFilePath] -- | Like getDirsFiles, but returns the filename only, instead of -- prepending the base path. getDirsFiles' :: RawFilePath -> IO [RawFilePath] -- | Like getDirsFiles', except returning a Stream. getDirsFilesStream :: (MonadCatch m, MonadAsync m, MonadMask m) => RawFilePath -> IO (SerialT m RawFilePath) -- | Get the file type of the file located at the given path. Does not -- follow symbolic links. -- -- Throws: -- -- getFileType :: RawFilePath -> IO FileType -- | Applies realpath on the given path. -- -- Throws: -- -- canonicalizePath :: RawFilePath -> IO RawFilePath -- | Converts any path to an absolute path. This is done in the following -- way: -- -- toAbs :: RawFilePath -> IO RawFilePath instance GHC.Show.Show System.Posix.RawFilePath.Directory.FileType instance GHC.Classes.Eq System.Posix.RawFilePath.Directory.FileType