Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Hackage.Security.Util.Path
Description
A more type-safe version of file paths
This module is intended to replace imports of System.FilePath, and additionally exports thin wrappers around common IO functions. To facilitate importing this module unqualified we also re-export some definitions from System.IO (importing both would likely lead to name clashes).
Note that his module does not import any other modules from Hackage.Security; everywhere else we use Path instead of FilePath directly.
Synopsis
- newtype Path a = Path FilePath
- castRoot :: Path root -> Path root'
- takeDirectory :: Path a -> Path a
- takeFileName :: Path a -> String
- (<.>) :: Path a -> String -> Path a
- splitExtension :: Path a -> (Path a, String)
- takeExtension :: Path a -> String
- data Unrooted
- (</>) :: Path a -> Path Unrooted -> Path a
- rootPath :: Path Unrooted -> Path root
- unrootPath :: Path root -> Path Unrooted
- toUnrootedFilePath :: Path Unrooted -> FilePath
- fromUnrootedFilePath :: FilePath -> Path Unrooted
- fragment :: String -> Path Unrooted
- joinFragments :: [String] -> Path Unrooted
- splitFragments :: Path Unrooted -> [String]
- isPathPrefixOf :: Path Unrooted -> Path Unrooted -> Bool
- data Relative
- data Absolute
- data HomeDir
- class FsRoot root where
- toAbsoluteFilePath :: Path root -> IO FilePath
- data FsPath = forall root.FsRoot root => FsPath (Path root)
- toFilePath :: Path Absolute -> FilePath
- fromFilePath :: FilePath -> FsPath
- makeAbsolute :: FsPath -> IO (Path Absolute)
- fromAbsoluteFilePath :: FilePath -> Path Absolute
- withFile :: FsRoot root => Path root -> IOMode -> (Handle -> IO r) -> IO r
- 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)
- getDirectoryContents :: FsRoot root => Path root -> IO [Path Unrooted]
- getRecursiveContents :: FsRoot root => Path root -> IO [Path Unrooted]
- renameFile :: (FsRoot root, FsRoot root') => Path root -> Path root' -> IO ()
- getCurrentDirectory :: IO (Path Absolute)
- data Tar
- tarIndexLookup :: TarIndex -> Path Tar -> Maybe TarIndexEntry
- tarAppend :: (FsRoot root, FsRoot root') => Path root -> Path root' -> [Path Tar] -> IO ()
- data Web
- toURIPath :: FilePath -> Path Web
- fromURIPath :: Path Web -> FilePath
- uriPath :: URI -> Path Web
- modifyUriPath :: URI -> (Path Web -> Path Web) -> URI
- data IOMode
- data BufferMode
- = NoBuffering
- | LineBuffering
- | BlockBuffering (Maybe Int)
- data Handle
- data SeekMode
- hSetBuffering :: Handle -> BufferMode -> IO ()
- hClose :: Handle -> IO ()
- hFileSize :: Handle -> IO Integer
- hSeek :: Handle -> SeekMode -> Integer -> IO ()
Paths
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.
Constructors
Path FilePath |
Instances
Monad m => FromObjectKey m (Path root) # | |
Defined in Hackage.Security.Util.JSON Methods fromObjectKey :: String -> m (Maybe (Path root)) # | |
Monad m => ToObjectKey m (Path root) # | |
Defined in Hackage.Security.Util.JSON Methods toObjectKey :: Path root -> m String # | |
Show (Path a) # | |
Eq (Path a) # | |
Ord (Path a) # | |
Pretty (Path CacheRoot) # | |
Defined in Hackage.Security.TUF.Paths | |
Pretty (Path IndexRoot) # | |
Defined in Hackage.Security.TUF.Paths | |
Pretty (Path RepoRoot) # | |
Defined in Hackage.Security.TUF.Paths | |
Pretty (Path Absolute) # | |
Defined in Hackage.Security.Util.Path | |
Pretty (Path HomeDir) # | |
Defined in Hackage.Security.Util.Path | |
Pretty (Path Relative) # | |
Defined in Hackage.Security.Util.Path | |
Pretty (Path Tar) # | |
Defined in Hackage.Security.Util.Path | |
Pretty (Path Unrooted) # | |
Defined in Hackage.Security.Util.Path |
castRoot :: Path root -> Path root' #
Reinterpret the root of a path
This literally just changes the type-level tag; use with caution!
FilePath-like operations on paths with arbitrary roots
takeDirectory :: Path a -> Path a #
takeFileName :: Path a -> String #
splitExtension :: Path a -> (Path a, String) #
takeExtension :: Path a -> String #
Unrooted paths
Type-level tag for unrooted paths
Unrooted paths need a root before they can be interpreted.
rootPath :: Path Unrooted -> Path root #
Reinterpret an unrooted path
This is an alias for castRoot
; see comments there.
unrootPath :: Path root -> Path Unrooted #
Forget a path's root
This is an alias for castRoot
; see comments there.
toUnrootedFilePath :: Path Unrooted -> FilePath #
Convert a relative/unrooted Path to a FilePath (using POSIX style directory separators).
See also toAbsoluteFilePath
fromUnrootedFilePath :: FilePath -> Path Unrooted #
Convert from a relative/unrooted FilePath (using POSIX style directory separators).
joinFragments :: [String] -> Path Unrooted #
splitFragments :: Path Unrooted -> [String] #
File-system paths
A file system root can be interpreted as an (absolute) FilePath
Methods
toAbsoluteFilePath :: Path root -> IO FilePath #
Convert a Path to an absolute FilePath (using native style directory separators).
Instances
FsRoot Absolute # | |
Defined in Hackage.Security.Util.Path Methods toAbsoluteFilePath :: Path Absolute -> IO FilePath # | |
FsRoot HomeDir # | |
Defined in Hackage.Security.Util.Path Methods toAbsoluteFilePath :: Path HomeDir -> IO FilePath # | |
FsRoot Relative # | |
Defined in Hackage.Security.Util.Path Methods toAbsoluteFilePath :: Path Relative -> IO FilePath # |
Abstract over a file system root
see fromFilePath
Conversions
toFilePath :: Path Absolute -> FilePath #
fromFilePath :: FilePath -> FsPath #
makeAbsolute :: FsPath -> IO (Path Absolute) #
fromAbsoluteFilePath :: FilePath -> Path Absolute #
Wrappers around System.IO
openTempFile' :: FsRoot root => Path root -> String -> IO (Path Absolute, Handle) #
Wrapper around openBinaryTempFileWithDefaultPermissions
NOTE: The caller is responsible for cleaning up the temporary file.
Wrappers around Data.ByteString
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 () #
Wrappers around System.Directory
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) #
getDirectoryContents :: FsRoot root => Path root -> IO [Path Unrooted] #
Return the immediate children of a directory
Filters out "."
and ".."
.
getRecursiveContents :: 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.)
getCurrentDirectory :: IO (Path Absolute) #
Wrappers around Codec.Archive.Tar
tarIndexLookup :: TarIndex -> Path Tar -> Maybe TarIndexEntry #
Wrappers around Network.URI
fromURIPath :: Path Web -> FilePath #
Re-exports
Constructors
ReadMode | |
WriteMode | |
AppendMode | |
ReadWriteMode |
Instances
Enum IOMode | |
Defined in GHC.IO.IOMode | |
Ix IOMode | |
Read IOMode | |
Defined in GHC.IO.IOMode | |
Show IOMode | |
Eq IOMode | |
Ord IOMode | |
data BufferMode #
Constructors
NoBuffering | |
LineBuffering | |
BlockBuffering (Maybe Int) |
Instances
Read BufferMode | |
Defined in GHC.IO.Handle.Types Methods readsPrec :: Int -> ReadS BufferMode readList :: ReadS [BufferMode] readPrec :: ReadPrec BufferMode readListPrec :: ReadPrec [BufferMode] | |
Show BufferMode | |
Defined in GHC.IO.Handle.Types Methods showsPrec :: Int -> BufferMode -> ShowS show :: BufferMode -> String showList :: [BufferMode] -> ShowS | |
Eq BufferMode | |
Defined in GHC.IO.Handle.Types | |
Ord BufferMode | |
Defined in GHC.IO.Handle.Types Methods compare :: BufferMode -> BufferMode -> Ordering (<) :: BufferMode -> BufferMode -> Bool (<=) :: BufferMode -> BufferMode -> Bool (>) :: BufferMode -> BufferMode -> Bool (>=) :: BufferMode -> BufferMode -> Bool max :: BufferMode -> BufferMode -> BufferMode min :: BufferMode -> BufferMode -> BufferMode |
Constructors
AbsoluteSeek | |
RelativeSeek | |
SeekFromEnd |
Instances
Enum SeekMode | |
Defined in GHC.IO.Device | |
Ix SeekMode | |
Defined in GHC.IO.Device | |
Read SeekMode | |
Defined in GHC.IO.Device | |
Show SeekMode | |
Eq SeekMode | |
Ord SeekMode | |
hSetBuffering :: Handle -> BufferMode -> IO () #