h$#      !" Safe-Inferred3thpathThe main Path type.The type variable b is either:# -- absolute path (starting with a "/")' -- relative path (not starting with a "/")Internally it 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 "./", etc.Two special paths exist:"/" -- the  (absolute)"." -- the  (relative)The constructor is not exposed. Instead, use the smart constructors ,  and  .#hpathSame as  .The following property holds: x == y D show x == show y$hpathByteString ordering.The following property holds: 'show x `compare` show y D x `compare` y%hpathByteString equality.The following property holds: show x == show y D x == y&+ 2015@2016 FP Complete, 2016 Julian Ospald BSD 3 clause"Julian Ospald  experimentalportableNone3hpath"Exception when parsing a location.hpath$A relative path; one without a root.hpathAn absolute path.hpathGet a location for an absolute path. Produces a normalised path.Throws: parseAbs "/abc""/abc" parseAbs "/""/"parseAbs "/abc/def" "/abc/def"parseAbs "/abc/def/.///" "/abc/def"parseAbs "abc"*** Exception: InvalidAbs "abc" parseAbs ""*** Exception: InvalidAbs ""parseAbs "/abc/../foo"'*** Exception: InvalidAbs "/abc/../foo"hpathGet a location for a relative path. Produces a normalised path. Note that filepath may contain any number of ./, but not a single .. anywhere.Throws:  parseRel "abc""abc"parseRel "def/""def"parseRel "abc/def" "abc/def"parseRel "abc/def/." "abc/def"parseRel "/abc" *** Exception: InvalidRel "/abc" parseRel ""*** Exception: InvalidRel ""parseRel "abc/../foo"&*** Exception: InvalidRel "abc/../foo" parseRel ".""."parseRel "././././.""."parseRel "./...""..." parseRel ".."*** Exception: InvalidRel ".."hpath1Parses a path, whether it's relative or absolute.Throws:  parseAny "/abc" Left "/abc"parseAny "..." Right "..."parseAny "abc/def"Right "abc/def"parseAny "abc/def/."Right "abc/def"parseAny "/abc" Left "/abc" parseAny ""*** Exception: InvalidRel ""parseAny "abc/../foo"&*** Exception: InvalidRel "abc/../foo" parseAny "." Right "." parseAny ".."*** Exception: InvalidRel ".." hpathThe "/" root path. hpathThe "." pwd path. 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.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.[abs|/|] [rel|file|]"/file"[abs|/path/to|] [rel|file|]"/path/to/file"[abs|/|] [rel|file/lal|] "/file/lal"[abs|/|] [rel|.|]"/"[rel|.|] [rel|.|]"."hpathStrip 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.2[abs|/lal/lad|] `stripDir` [abs|/lal/lad/fad|]"fad"1[rel|lal/lad|] `stripDir` [rel|lal/lad/fad|]"fad"'[abs|/|] `stripDir` [abs|/|]".".[abs|/lal/lad/fad|] `stripDir` [abs|/lal/lad|]?*** Exception: Couldn'tStripPrefixTPS "/lal/lad/fad" "/lal/lad".[abs|/abs|] `stripDir` [abs|/lal/lad|]7*** Exception: Couldn'tStripPrefixTPS "/abs" "/lal/lad")[rel|fad|] `stripDir` [rel|fad|]"."'[rel|.|] `stripDir` [rel|.|]"."*[rel|.|] `stripDir` [rel|.foo|]0*** Exception: Couldn'tStripPrefixTPS "." ".foo"hpathGet all parents of a path.!getAllParents [abs|/abs/def/dod|]["/abs/def","/abs","/"]getAllParents [abs|/foo|]["/"]getAllParents [abs|/|][]hpathGets all path components.#getAllComponents [rel|abs/def/dod|]["abs","def","dod"]getAllComponents [rel|abs|]["abs"]getAllComponents [rel|.|]["."]hpath6Gets all path components after the "/" root directory.-getAllComponentsAfterRoot [abs|/abs/def/dod|]["abs","def","dod"]%getAllComponentsAfterRoot [abs|/abs|]["abs"]hpath%Extract the directory name of a path.dirname [abs|/abc/def/dod|] "/abc/def"dirname [abs|/|]"/"hpath Extract the file part of a path.The following properties hold:  basename (p a) == basename aThrows:  if given the root path "/"basename [abs|/abc/def/dod|]"dod"basename [rel|abc/def/dod|]"dod"basename [rel|dod|]"dod"basename [rel|.|]"."basename [abs|/|]#*** Exception: RootDirHasNoBasenamehpath)Extract the file part of a relative path.The following properties hold: "basename' (p a) == basename' abasename' [rel|abc/def/dod|]"dod"basename' [rel|dod|]"dod"basename' [rel|.|]"."hpath>Is p a parent of the given location? Implemented in terms of . The bases must match.4[abs|/lal/lad|] `isParentOf` [abs|/lal/lad/fad|]True3[rel|lal/lad|] `isParentOf` [rel|lal/lad/fad|]True)[abs|/|] `isParentOf` [abs|/|]False0[abs|/lal/lad/fad|] `isParentOf` [abs|/lal/lad|]False+[rel|fad|] `isParentOf` [rel|fad|]False,[rel|.|] `isParentOf` [rel|.foo|]Falsehpath2Check whether the given Path is the root "/" path.isRootPath [abs|/lal/lad|]FalseisRootPath [abs|/|]Truehpath1Check whether the given Path is the pwd "." path.isPwdPath [rel|lal/lad|]FalseisPwdPath [rel|.|]TruehpathQuasiquote 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"hpathQuasiquote 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.12.1-FJRhCqEmeF62XmBrXzRpQNHPathHPath.InternalAbsRelrootPathpwdPathparseAbsparseRelparseAny toFilePathPath PathExceptionPathParseExceptionfromAbsfromRelfromAnystripDir getAllParentsgetAllComponentsgetAllComponentsAfterRootdirnamebasename basename' isParentOf isRootPath isPwdPath withAbsPath withRelPathabsrel$fLiftLiftedRepPath$fExceptionPathParseException$fExceptionPathException$fShowPathException$fShowPathParseException $fShowPath $fOrdPath$fEqPathMkPath