úÎ!P‰N‰"      !Safe2 ÌhpathPath of some base and type.FInternally is a ByteString. The ByteString can be of two formats only: !without trailing path separator: file.txt,  foo/bar.txt,  /foo/bar.txtwith trailing path separator: foo/,  /foo/bar/(There are no duplicate path separators //, no .., no ./, no ~/, etc.hpathSame as .The following property holds: x == y "a show x == show yhpathByteString ordering.The following property holds: 'show x `compare` show y "a x `compare` yhpathByteString 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> experimentalportableSafe2gMÍhpath"Exception when parsing a location. hpathA filename, without any ". 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)NothinghpathAParses a filename. Filenames must not contain slashes. Excludes # and '..'.Throws:  'parseFn "abc" :: Maybe (Path Fn) Just "abc"'parseFn "..." :: Maybe (Path Fn) Just "..."'parseFn "def/" :: Maybe (Path Fn)Nothing'parseFn "abc/def" :: Maybe (Path Fn)Nothing'parseFn "abc/def/." :: Maybe (Path Fn)Nothing'parseFn "/abc" :: Maybe (Path Fn)Nothing'parseFn "" :: Maybe (Path Fn)Nothing'parseFn "abc/../foo" :: Maybe (Path Fn)Nothing'parseFn "." :: Maybe (Path Fn)Nothing'parseFn ".." :: Maybe (Path Fn)Nothinghpath&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"7(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)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")FalsehpathGet all parents of a path.%getAllParents (MkPath "/abs/def/dod")["/abs/def","/abs","/"]getAllParents (MkPath "/")[]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 "/"3basename (MkPath "/abc/def/dod") :: Maybe (Path Fn) Just "dod"4basename (MkPath "/abc/def/dod/") :: Maybe (Path Fn) Just "dod"3basename (MkPath "/") :: Maybe (Path Fn)Nothing   $      !"#$%&$'()#hpath-0.10.0-GM38KS0ft2M8M1pM4FOlIoHPath.InternalHPath toFilePathPathMkPath $fNFDataPath $fShowPath $fOrdPath$fEqPathRelC PathExceptionPathParseExceptionFnRelAbsparseAbsparseRelparseFnfromAbsfromRelstripDir isParentOf getAllParentsdirnamebasename withAbsPath withRelPath withFnPath$fExceptionPathParseException$fExceptionPathException$fRelCFn $fRelCRel$fShowPathParseException$fShowPathExceptionbaseGHC.Real/GHC.Base.