hashed-storage-0.5.11: Hashed file storage support code.

Safe HaskellSafe
LanguageHaskell98

Storage.Hashed.AnchoredPath

Contents

Description

This module implements relative paths within a Tree. All paths are anchored at a certain root (this is usually the Tree root). They are represented by a list of Names (these are just strict bytestrings).

Synopsis

Documentation

newtype Name #

Constructors

Name ByteString 
Instances
Eq Name # 
Instance details

Defined in Storage.Hashed.AnchoredPath

Methods

(==) :: Name -> Name -> Bool #

(/=) :: Name -> Name -> Bool #

Ord Name # 
Instance details

Defined in Storage.Hashed.AnchoredPath

Methods

compare :: Name -> Name -> Ordering #

(<) :: Name -> Name -> Bool #

(<=) :: Name -> Name -> Bool #

(>) :: Name -> Name -> Bool #

(>=) :: Name -> Name -> Bool #

max :: Name -> Name -> Name #

min :: Name -> Name -> Name #

Show Name # 
Instance details

Defined in Storage.Hashed.AnchoredPath

Methods

showsPrec :: Int -> Name -> ShowS #

show :: Name -> String #

showList :: [Name] -> ShowS #

newtype AnchoredPath #

This is a type of "sane" file paths. These are always canonic in the sense that there are no stray slashes, no ".." components and similar. They are usually used to refer to a location within a Tree, but a relative filesystem path works just as well. These are either constructed from individual name components (using "appendPath", "catPaths" and "makeName"), or converted from a FilePath ("floatPath" -- but take care when doing that) or .

Constructors

AnchoredPath [Name] 
Instances
Eq AnchoredPath # 
Instance details

Defined in Storage.Hashed.AnchoredPath

Ord AnchoredPath # 
Instance details

Defined in Storage.Hashed.AnchoredPath

Show AnchoredPath # 
Instance details

Defined in Storage.Hashed.AnchoredPath

(Functor m, Monad m) => TreeRW (TreeMonad m) # 
Instance details

Defined in Storage.Hashed.Monad

(Functor m, Monad m) => TreeRO (TreeMonad m) # 
Instance details

Defined in Storage.Hashed.Monad

appendPath :: AnchoredPath -> Name -> AnchoredPath #

Append an element to the end of a path.

anchorPath :: FilePath -> AnchoredPath -> FilePath #

Take a "root" directory and an anchored path and produce a full FilePath. Moreover, you can use anchorPath "" to get a relative FilePath.

isPrefix :: AnchoredPath -> AnchoredPath -> Bool #

Check whether a path is a prefix of another path.

parent :: AnchoredPath -> AnchoredPath #

Get parent (path) of a given path. foobarbaz -> foo/bar

parents :: AnchoredPath -> [AnchoredPath] #

List all parents of a given path. foobarbaz -> [foo, foo/bar]

catPaths :: AnchoredPath -> AnchoredPath -> AnchoredPath #

Catenate two paths together. Not very safe, but sometimes useful (e.g. when you are representing paths relative to a different point than a Tree root).

Unsafe functions.

floatBS :: ByteString -> AnchoredPath #

Unsafe. Only ever use on bytestrings that came from flatten on a pre-existing AnchoredPath.

floatPath :: FilePath -> AnchoredPath #

Take a relative FilePath and turn it into an AnchoredPath. The operation is (relatively) unsafe. Basically, by using floatPath, you are testifying that the argument is a path relative to some common root -- i.e. the root of the associated Tree object. Also, there are certain invariants about AnchoredPath that this function tries hard to preserve, but probably cannot guarantee (i.e. this is a best-effort thing). You should sanitize any FilePaths before you declare them "good" by converting into AnchoredPath (using this function).