-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Support for well-typed paths -- -- Support for well-typed paths, utilizing ByteString under the hood. @package hpath @version 0.11.0 -- | Support for well-typed paths. module HPath -- | An absolute path. data Abs -- | The main Path type. -- -- The type variable b is either: -- --
-- >>> parseAbs "/abc" :: Maybe (Path Abs) -- Just "/abc" -- -- >>> parseAbs "/" :: Maybe (Path Abs) -- Just "/" -- -- >>> parseAbs "/abc/def" :: Maybe (Path Abs) -- Just "/abc/def" -- -- >>> parseAbs "/abc/def/.///" :: Maybe (Path Abs) -- Just "/abc/def" -- -- >>> parseAbs "abc" :: Maybe (Path Abs) -- Nothing -- -- >>> parseAbs "" :: Maybe (Path Abs) -- Nothing -- -- >>> parseAbs "/abc/../foo" :: Maybe (Path Abs) -- Nothing --parseAbs :: MonadThrow m => ByteString -> m (Path Abs) -- | Get a location for a relative path. Produces a normalised path. -- -- Note that filepath may contain any number of ./ but -- may not consist solely of ./. It also may not contain a -- single .. anywhere. -- -- Throws: PathParseException -- --
-- >>> parseRel "abc" :: Maybe (Path Rel) -- Just "abc" -- -- >>> parseRel "def/" :: Maybe (Path Rel) -- Just "def" -- -- >>> parseRel "abc/def" :: Maybe (Path Rel) -- Just "abc/def" -- -- >>> parseRel "abc/def/." :: Maybe (Path Rel) -- Just "abc/def" -- -- >>> parseRel "/abc" :: Maybe (Path Rel) -- Nothing -- -- >>> parseRel "" :: Maybe (Path Rel) -- Nothing -- -- >>> parseRel "abc/../foo" :: Maybe (Path Rel) -- Nothing -- -- >>> parseRel "." :: Maybe (Path Rel) -- Nothing -- -- >>> parseRel ".." :: Maybe (Path Rel) -- Nothing --parseRel :: MonadThrow m => ByteString -> m (Path Rel) -- | Parses a path, whether it's relative or absolute. Will lose -- information on whether it's relative or absolute. If you need to know, -- reparse it. -- -- Filenames must not contain slashes. Excludes . and '..'. -- -- Throws: PathParseException -- --
-- >>> parseAny "/abc" :: Maybe (Either (Path Abs) (Path Rel)) -- Just (Left "/abc") -- -- >>> parseAny "..." :: Maybe (Either (Path Abs) (Path Rel)) -- Just (Right "...") -- -- >>> parseAny "abc/def" :: Maybe (Either (Path Abs) (Path Rel)) -- Just (Right "abc/def") -- -- >>> parseAny "abc/def/." :: Maybe (Either (Path Abs) (Path Rel)) -- Just (Right "abc/def") -- -- >>> parseAny "/abc" :: Maybe (Either (Path Abs) (Path Rel)) -- Just (Left "/abc") -- -- >>> parseAny "" :: Maybe (Either (Path Abs) (Path Rel)) -- Nothing -- -- >>> parseAny "abc/../foo" :: Maybe (Either (Path Abs) (Path Rel)) -- Nothing -- -- >>> parseAny "." :: Maybe (Either (Path Abs) (Path Rel)) -- Nothing -- -- >>> parseAny ".." :: Maybe (Either (Path Abs) (Path Rel)) -- Nothing --parseAny :: MonadThrow m => ByteString -> m (Either (Path Abs) (Path Rel)) rootPath :: Path Abs -- | Convert an absolute Path to a ByteString type. fromAbs :: Path Abs -> ByteString -- | Convert a relative Path to a ByteString type. fromRel :: Path Rel -> ByteString -- | Convert any Path to a ByteString type. toFilePath :: Path b -> ByteString fromAny :: Either (Path Abs) (Path Rel) -> ByteString -- | Append two paths. -- -- The second argument must always be a relative path, which ensures that -- undefinable things like `"abc" <> "/def"` cannot happen. -- -- Technically, the first argument can be a path that points to a -- non-directory, because this library is IO-agnostic and makes no -- assumptions about file types. -- --
-- >>> (MkPath "/") </> (MkPath "file" :: Path Rel) -- "/file" -- -- >>> (MkPath "/path/to") </> (MkPath "file" :: Path Rel) -- "/path/to/file" -- -- >>> (MkPath "/") </> (MkPath "file/lal" :: Path Rel) -- "/file/lal" -- -- >>> (MkPath "/") </> (MkPath "file" :: Path Rel) -- "/file" --(>) :: Path b -> Path Rel -> Path b -- | Extract the file part of a path. -- -- The following properties hold: -- --
-- basename (p </> a) == basename a ---- -- Throws: PathException if given the root path "/" -- --
-- >>> basename (MkPath "/abc/def/dod") :: Maybe (Path Rel) -- Just "dod" -- -- >>> basename (MkPath "abc/def/dod") :: Maybe (Path Rel) -- Just "dod" -- -- >>> basename (MkPath "dod") :: Maybe (Path Rel) -- Just "dod" -- -- >>> basename (MkPath "/") :: Maybe (Path Rel) -- Nothing --basename :: MonadThrow m => Path b -> m (Path Rel) -- | Extract the directory name of a path. -- --
-- >>> dirname (MkPath "/abc/def/dod") -- "/abc/def" -- -- >>> dirname (MkPath "/") -- "/" --dirname :: Path Abs -> Path Abs -- | Get all parents of a path. -- --
-- >>> getAllParents (MkPath "/abs/def/dod") -- ["/abs/def","/abs","/"] -- -- >>> getAllParents (MkPath "/foo") -- ["/"] -- -- >>> getAllParents (MkPath "/") -- [] --getAllParents :: Path Abs -> [Path Abs] -- | Gets all path components. -- --
-- >>> getAllComponents (MkPath "abs/def/dod") -- ["abs","def","dod"] -- -- >>> getAllComponents (MkPath "abs") -- ["abs"] --getAllComponents :: Path Rel -> [Path Rel] -- | Gets all path components after the "/" root directory. -- --
-- >>> getAllComponentsAfterRoot (MkPath "/abs/def/dod") -- ["abs","def","dod"] -- -- >>> getAllComponentsAfterRoot (MkPath "/abs") -- ["abs"] --getAllComponentsAfterRoot :: Path Abs -> [Path Rel] -- | Strip directory from path, making it relative to that directory. -- Throws Couldn'tStripPrefixDir if directory is not a parent of -- the path. -- -- The bases must match. -- --
-- >>> (MkPath "/lal/lad") `stripDir` (MkPath "/lal/lad/fad") :: Maybe (Path Rel) -- Just "fad" -- -- >>> (MkPath "lal/lad") `stripDir` (MkPath "lal/lad/fad") :: Maybe (Path Rel) -- Just "fad" -- -- >>> (MkPath "/") `stripDir` (MkPath "/") :: Maybe (Path Rel) -- Nothing -- -- >>> (MkPath "/lal/lad/fad") `stripDir` (MkPath "/lal/lad") :: Maybe (Path Rel) -- Nothing -- -- >>> (MkPath "fad") `stripDir` (MkPath "fad") :: Maybe (Path Rel) -- Nothing --stripDir :: MonadThrow m => Path b -> Path b -> m (Path Rel) -- | Is p a parent of the given location? Implemented in terms of -- stripDir. The bases must match. -- --
-- >>> (MkPath "/lal/lad") `isParentOf` (MkPath "/lal/lad/fad") -- True -- -- >>> (MkPath "lal/lad") `isParentOf` (MkPath "lal/lad/fad") -- True -- -- >>> (MkPath "/") `isParentOf` (MkPath "/") -- False -- -- >>> (MkPath "/lal/lad/fad") `isParentOf` (MkPath "/lal/lad") -- False -- -- >>> (MkPath "fad") `isParentOf` (MkPath "fad") -- False --isParentOf :: Path b -> Path b -> Bool -- | Check whether the given Path is the root "/" path. -- --
-- >>> isRootPath (MkPath "/lal/lad") -- False -- -- >>> isRootPath (MkPath "/") -- True --isRootPath :: Path Abs -> Bool withAbsPath :: Path Abs -> (ByteString -> IO a) -> IO a withRelPath :: Path Rel -> (ByteString -> IO a) -> IO a -- | Quasiquote an absolute Path. This accepts Unicode Chars and will -- encode as UTF-8. -- --
-- >>> [abs|/etc/profile|] :: Path Abs -- "/etc/profile" -- -- >>> [abs|/|] :: Path Abs -- "/" -- -- >>> [abs|/|] :: Path Abs -- "/\239\131\144" --abs :: QuasiQuoter -- | Quasiquote a relative Path. This accepts Unicode Chars and will encode -- as UTF-8. -- --
-- >>> [rel|etc|] :: Path Rel -- "etc" -- -- >>> [rel|bar/baz|] :: Path Rel -- "bar/baz" -- -- >>> [rel||] :: Path Rel -- "\239\131\144" --rel :: QuasiQuoter instance GHC.Show.Show HPath.PathException instance GHC.Show.Show HPath.PathParseException instance GHC.Exception.Type.Exception HPath.PathException instance GHC.Exception.Type.Exception HPath.PathParseException instance Language.Haskell.TH.Syntax.Lift (HPath.Internal.Path a)