!ca      Safe2 hpathThe main Path type.The type variable b is either:Abs -- absolute pathRel -- relative path~Internally is a ByteString. The path is guaranteed to be normalised and contain no trailing Path separators, except for the   root path.(There are no duplicate path separators //, no .., no ./, no ~/, etc.!hpathSame as .The following property holds: x == y "a show x == show y"hpathByteString ordering.The following property holds: 'show x `compare` show y "a x `compare` y#hpathByteString equality.The following property holds: show x == show y "a x == y$+ 2015 2016 FP Complete, 2016 Julian Ospald BSD 3 clause"Julian Ospald <hasufell@posteo.de> experimentalportableNone2g`hpath"Exception when parsing a location.hpath$A relative path; one without a root.hpathAn absolute path.hpath@Get a location for an absolute path. Produces a normalised path.Throws: ,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)Nothinghpath@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:  )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)NothinghpathParses 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:  =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 hpath&Convert any Path to a ByteString type. hpath.Convert an absolute Path to a ByteString type. hpath-Convert a relative Path to a ByteString type.hpathAppend two paths.bThe 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.7(MkPath "/") </> (MkPath "file" :: Path Rel)"/file"7(MkPath "/path/to") </> (MkPath "file" :: Path Rel)"/path/to/file"7(MkPath "/") </> (MkPath "file/lal" :: Path Rel) "/file/lal"6(MkPath "/") </> (MkPath "file" :: Path Rel)"/file"hpathIStrip 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.N(MkPath "/lal/lad") `stripDir` (MkPath "/lal/lad/fad") :: Maybe (Path Rel) Just "fad"N(MkPath "lal/lad") `stripDir` (MkPath "lal/lad/fad") :: Maybe (Path Rel) Just "fad"N(MkPath "/") `stripDir` (MkPath "/") :: Maybe (Path Rel)NothingN(MkPath "/lal/lad/fad") `stripDir` (MkPath "/lal/lad") :: Maybe (Path Rel)NothingN(MkPath "fad") `stripDir` (MkPath "fad") :: Maybe (Path Rel)NothinghpathGet all parents of a path.%getAllParents (MkPath "/abs/def/dod")["/abs/def","/abs","/"]getAllParents (MkPath "/foo")["/"]getAllParents (MkPath "/")[]hpathGets all path components.'getAllComponents (MkPath "abs/def/dod")["abs","def","dod"]getAllComponents (MkPath "abs")["abs"]hpath6Gets all path components after the "/" root directory.1getAllComponentsAfterRoot (MkPath "/abs/def/dod")["abs","def","dod"])getAllComponentsAfterRoot (MkPath "/abs")["abs"]hpath%Extract the directory name of a path.dirname (MkPath "/abc/def/dod") "/abc/def"dirname (MkPath "/")"/"hpath Extract the file part of a path.The following properties hold:  basename (p </> a) == basename aThrows:  if given the root path "/"4basename (MkPath "/abc/def/dod") :: Maybe (Path Rel) Just "dod"4basename (MkPath "abc/def/dod") :: Maybe (Path Rel) Just "dod"4basename (MkPath "dod") :: Maybe (Path Rel) Just "dod"4basename (MkPath "/") :: Maybe (Path Rel)Nothinghpath>Is p a parent of the given location? Implemented in terms of . The bases must match.<(MkPath "/lal/lad") `isParentOf` (MkPath "/lal/lad/fad")True;(MkPath "lal/lad") `isParentOf` (MkPath "lal/lad/fad")True1(MkPath "/") `isParentOf` (MkPath "/")False8(MkPath "/lal/lad/fad") `isParentOf` (MkPath "/lal/lad")False3(MkPath "fad") `isParentOf` (MkPath "fad")Falsehpath2Check whether the given Path is the root "/" path.isRootPath (MkPath "/lal/lad")FalseisRootPath (MkPath "/")TruehpathQQuasiquote 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"hpathPQuasiquote 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"  &      !"#$%&'(")*+#hpath-0.11.0-5oc4N2UV6XKFAJeZs4NXzeHPathHPath.Internal toFilePathPath PathExceptionPathParseExceptionRelAbsparseAbsparseRelparseAnyrootPathfromAbsfromRelfromAnystripDir getAllParentsgetAllComponentsgetAllComponentsAfterRootdirnamebasename isParentOf isRootPath withAbsPath withRelPathabsrel $fLiftPath$fExceptionPathParseException$fExceptionPathException$fShowPathParseException$fShowPathExceptionbaseGHC.Real/ $fShowPath $fOrdPath$fEqPathMkPathGHC.Base.