úÎr§oR:      !"#$%&'()*+,-./0123456789None0Path 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.>Normalized file path representation for the relative path root Convert to a : type.VAll directories have a trailing slash, so if you want no trailing slash, you can use  from the filepath package.–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 y String ordering.The following property holds: 'show x `compare` show y "a x `compare` y String equality.The following property holds: show x == show y "a x == y    None09;& Same as  . 1Exceptions that can occur during path operations.A directory path. A file path.1A relative path; one without a root. Note that a ..R path component to represent the parent directory is not allowed by this library.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 &)·If the directory in the first argument is a proper prefix of the path in the second argument strip it from the second argument, generating a path relative to the directory. Throws 6 if the directory is not a proper prefix of the path.The following properties hold: !stripProperPrefix x (x </> y) = y$Cases which are proven not possible: 5stripProperPrefix (a :: Path Abs &) (b :: Path Rel &) 5stripProperPrefix (a :: Path Rel &) (b :: Path Abs &)$In other words the bases must match.fDetermines if the path in the first parameter is a proper prefix of the path in the second parameter.The following properties hold: not (x `isProperPrefixOf` x) x `isProperPrefixOf` (x </> y)+Take the parent path component from a path.The following properties hold: ;parent (x </> y) == x parent "/x" == "/" parent "x" == "." EOn the root (absolute or relative), 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 $(mkRelDir ".") == $(mkRelDir ".") dirname (p </> a) == dirname a  #Get extension from given file path.!SAdd extension to given file path. Throws if the resulting filename does not parse.(addFileExtension "txt $(mkRelFile "foo") "foo.txt"3addFileExtension "symbols" $(mkRelFile "Data.List")"Data.List.symbols"4addFileExtension ".symbols" $(mkRelFile "Data.List")"Data.List.symbols"4addFileExtension "symbols" $(mkRelFile "Data.List.")"Data.List..symbols"5addFileExtension ".symbols" $(mkRelFile "Data.List.")"Data.List..symbols"1addFileExtension "evil/" $(mkRelFile "Data.List")/*** Exception: InvalidRelFile "Data.List.evil/""A synonym for !6 in the form of an operator. See more examples there.&$(mkRelFile "Data.List") <.> "symbols""Data.List.symbols"$$(mkRelFile "Data.List") <.> "evil/"/*** Exception: InvalidRelFile "Data.List.evil/"# [Replace/add extension to given file path. Throws if the resulting filename does not parse.$A synonym for # in the form of an operator.%Convert an absolute : to a normalized absolute dir .Throws:   when the supplied path:is not an absolute path contains a ..1 path component representing the parent directoryis not a valid path (See )&Convert a relative : to a normalized relative dir .Throws:  when the supplied path:is not a relative pathis "" contains a ..1 path component representing the parent directoryis not a valid path (See )'Convert an absolute : to a normalized absolute file .Throws:  when the supplied path:is not an absolute pathis a directory path i.e.has a trailing path separatoris . or ends in /. contains a ..1 path component representing the parent directoryis 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 pathis ""is a directory path i.e.has a trailing path separatoris . or ends in /. contains a ..1 path component representing the parent directoryis not a valid path (See )<$Is the string a valid relative file?)&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).0Make a   .=)Internal use for normalizing a directory.1Same as .2Same as .3 >? !Extension to add Old file name9New file name with the desired extension added at the end" Old file nameExtension to add9New file name with the desired extension added at the end#Extension to set Old file name(New file name with the desired extension$ Old file nameExtension to set(New file name with the desired extension%&';(<)*+,-./0=@1234567*  !"#$%&'()*+,-./012*  !"#$%&'()*+,-./0 12.  >? !"#$%&';(<)*+,-./0=@12345675"7$7A      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG!path-0.6.1-2YHySSKi4mrBOgFjpVeJT6 Path.InternalPathSystem.FilePathdropTrailingPathSeparatorisValid relRootFP toFilePath hasParentDir$fHashablePath $fToJSONPath $fNFDataPath $fShowPath $fOrdPath$fEqPathPathParseException PathException InvalidAbsDir InvalidRelDirInvalidAbsFileInvalidRelFileNotAProperPrefixDirFileRelAbsabsdirreldirabsfilerelfilestripProperPrefixisProperPrefixOfparentfilenamedirname fileExtensionaddFileExtension<.>setFileExtension-<.> parseAbsDir parseRelDir parseAbsFile parseRelFile fromAbsDir fromRelDir fromAbsFile fromRelFilemkAbsDirmkRelDir mkAbsFile mkRelFilestripDir isParentOf$fExceptionPathException$fFromJSONPath$fFromJSONPath0$fFromJSONPath1$fFromJSONPath2$fShowPathException$fEqPathExceptionbaseGHC.IOFilePath validAbsFile validRelFile normalizeDir parseJSONWithqqnormalizeFilePath