úÎX„UŠ-      !"#$%&'()*+,None0Path of some base and type.The type variables are:b=  base, the base location of the path; absolute or relative.t#  type, whether file or directory.>Internally is a string. The string can be of two formats only:  File format: file.txt,  foo/bar.txt,  /foo/bar.txtDirectory format: foo/,  /foo/bar/UAll directories end in a trailing separator. There are no duplicate path separators //, no .., no ./, no ~/, etc.–Helper function: check if the filepath has any parent directories in it. This handles the logic of checking for different path separators on Windows.!Same as 'show . Path.toFilePath'.The following property holds: x == y "a show x == show yString ordering.The following property holds: 'show x `compare` show y "a x `compare` yString equality.The following property holds: show x == show y "a x == y None09;! "Exception when parsing a location. A directory path.  A file path. 1A relative path; one without a root. Note that a .& as well as any path starting with a ..… is not a valid relative path. In other words, a relative path is always strictly under the directory tree to which it is relative. An absolute path.  Construct a      using QuasiQuotes. #[absdir|/|] [absdir|/home/chris|] :Remember: due to the nature of absolute paths a path like [absdir|/home/chris|]V may compile on your platform, but it may not compile on another platform (Windows).  Construct a      using QuasiQuotes. "[absdir|/home|]</>[reldir|chris|]   Construct a      using QuasiQuotes. [absfile|/home/chris/foo.txt|] :Remember: due to the nature of absolute paths a path like [absdir|/home/chris/foo.txt|]V may compile on your platform, but it may not compile on another platform (Windows).  Construct a      using QuasiQuotes. +[absdir|/home/chris|]</>[relfile|foo.txt|] Append two paths.6The following cases are valid and the equalities hold: =$(mkAbsDir x) </> $(mkRelDir y) = $(mkAbsDir (x ++ "/" ++ y)) ?$(mkAbsDir x) </> $(mkRelFile y) = $(mkAbsFile (x ++ "/" ++ y)) =$(mkRelDir x) </> $(mkRelDir y) = $(mkRelDir (x ++ "/" ++ y)) ?$(mkRelDir x) </> $(mkRelFile y) = $(mkRelFile (x ++ "/" ++ y))1The following are proven not possible to express: $(mkAbsFile &) </> x $(mkRelFile &) </> x x </> $(mkAbsFile &) x </> $(mkAbsDir &)IStrip directory from path, making it relative to that directory. Throws -* if directory is not a parent of the path.The following properties hold: stripDir x (x </> y) = y$Cases which are proven not possible: ,stripDir (a :: Path Abs &) (b :: Path Rel &) ,stripDir (a :: Path Rel &) (b :: Path Abs &)$In other words the bases must match.>Is p a parent of the given location? Implemented in terms of . The bases must match.The following properties hold: not (x `isParentOf` x) x `isParentOf` (x </> y):Take the absolute parent directory from the absolute path.The following properties hold: parent (x </> y) == x.On the root, getting the parent is idempotent: parent (parent "/") = "/" Extract the file part of a path.The following properties hold:  filename (p </> a) == filename a*Extract the last directory name of a path.The following properties hold: dirname (p </> a) == dirname a #Get extension from given file path. [Replace/add extension to given file path. Throws if the resulting filename does not parse.Convert an absolute . to a normalized absolute dir .Throws:   when the supplied path:is not an absolute path contains a .. anywhere in the pathis not a valid path (See )Convert a relative . to a normalized relative dir .Throws:   when the supplied path:is not a relative path is any of "", . or .. contains .. anywhere in the pathis not a valid path (See )Convert an absolute . to a normalized absolute file .Throws:   when the supplied path:is not an absolute pathhas a trailing path separator contains .. anywhere in the pathends in /.is not a valid path (See )/$Is the string a valid absolute file?Convert a relative . to a normalized relative file .Throws:   when the supplied path:is not a relative pathhas a trailing path separatoris "", . or .. contains .. anywhere in the pathis not a valid path (See )0$Is the string a valid relative file? Convert to a . type.VAll directories have a trailing slash, so if you want no trailing slash, you can use  from the filepath package.&Convert absolute path to directory to . type. &Convert relative path to directory to . type.!!Convert absolute path to file to . type."!Convert relative path to file to . type.#Make a    Dir'.9Remember: due to the nature of absolute paths this (e.g.  /home/fooW) may compile on your platform, but it may not compile on another platform (Windows).$Make a     .%Make a     .9Remember: due to the nature of absolute paths this (e.g.  /home/fooW) may compile on your platform, but it may not compile on another platform (Windows).&Make a     .1)Internal use for normalizing a directory./ 2345- 67Extension to set Old file name(New file name with the desired extension/0 !"#$%&819'()*+  !"#$%&   !"#$%&* 2345- 67/0 !"#$%&819'()*+:      !"#$%&'()*+,-./0123456789:;<=>?@!path-0.5.13-X1CfMEsSkxFLSXlK6xaRy Path.InternalPathSystem.FilePathisValiddropTrailingPathSeparator hasParentDir$fHashablePath $fToJSONPath $fNFDataPath $fShowPath $fOrdPath$fEqPathPathParseExceptionDirFileRelAbsabsdirreldirabsfilerelfilestripDir isParentOfparentfilenamedirname fileExtensionsetFileExtension parseAbsDir parseRelDir parseAbsFile parseRelFile toFilePath fromAbsDir fromRelDir fromAbsFile fromRelFilemkAbsDirmkRelDir mkAbsFile mkRelFile$fExceptionPathParseException$fFromJSONPath$fFromJSONPath0$fFromJSONPath1$fFromJSONPath2$fShowPathParseExceptionCouldn'tStripPrefixDirbaseGHC.IOFilePath validAbsFile validRelFile normalizeDir InvalidAbsDir InvalidRelDirInvalidAbsFileInvalidRelFile parseJSONWithqqcurDirNormalizedFPnormalizeFilePath