h%      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs Safe-Inferredtuvwxyz{None= strong-pathWhen you don't want your file path to be named, it is convenient to use unit (). strong-pathWhen you don't want your directory path to be named, it is convenient to use unit (). strong-pathWhen you don't want your path to be relative to anything specific, it is convenient to use unit (). strong-path is the most commonly used standard, so we provide you with a type alias for it. strong-path Describes , standard to be determined by the system/OS.-If the system is Windows, it will resolve to - internally, and if not, it will resolve to .7However, keep in mind that even if running on Windows, Path Windows b t and Path System b t: are still considered to be different types, even though Path System b t " internally uses Windows standard.You will normally want to use  if you are dealing with the paths on the disk of the host OS (where your code is running), for example if user is providing you with the path to the file on the disk that you will be doing something with. Keep in mind that  causes the behaviour of ! to be system/platform-dependant. strong-path Describes  standard as windows (e.g. C:\path\to\foobar ). Check + for more details, everything is analogous. strong-path Describes  standard as posix (e.g. /path/to/foobar). This makes  behave in system-independent fashion: code behaves the same regardless of the system it is running on. You will normally want to use it when dealing with paths from some external source, or with paths that have explicitely fixed standard. For example, if you are running your Haskell program on Windows and parsing logs which were obtained from the Linux server, or maybe you are parsing Javascript import statements, you will want to use . strong-path!Means that path points to a file file . To use as a type in place of file, we recommend creating an empty data type representing the specific file, e.g. data ProjectManifestFile. strong-path&Means that path points to a directory dir . To use as a type in place of dir, we recommend creating an empty data type representing the specific directory, e.g. data ProjectRootDir.  strong-path Describes # base as relative to the directory dir.  strong-path Describes  base as absolute.  strong-path*../, Int saying how many times it repeats. strong-path.Strongly typed file path. Central type of the  StrongPath. sStandard": Posix or windows. Can be fixed (, ) or determined by the system ().bBase : Absolute ( ) or relative ( ).tType: File () or directory ().Some examples: Path System (Dir HomeDir) (File FooFile) Path System Abs (Dir HomeDir) Path Posix (Rel ProjectRoot) (File ()) strong-pathExtracts a multiple "../" from start of the file path. If path is completely ......, also handles the last one. NOTE: We don't normalize path in any way."  !" ! None/0123456789:;<=>?@ABCDEF/0123456789:;<=>?@ABCDEFNone3GHIJKLMNOPQRSTUVWXYZ[\]^_None+` strong-pathGets parent dir of the path.Either removes last entry in the path or if there are no entries and just "../"s, adds one more "../".If path is absolute root and it has no parent, it will return unchanged path.Examples (pseudocode): parent "a/b/c" == "a/b" parent "/a" == "/" parent "/" == "/" parent "../a/b" == "../a" parent ".." == "../.." parent (parent "../a") == "../.."a strong-path Concatenates two paths, same as FilePath., but only if the second path is relative to the directory that first path leads to, and if both paths use the same path standard.How "../")s are resolved (examples are pseudocode): For each "../" at the start of the right hand path, one most right entry is removed from the left hand path. "a/b" "../c" == "a/c"5If left path is absolute and right path has too many "../":s, they go "over" the root and are effectively ignored. %"/a/b" "../../../../../c" == "/c"1If left path is relative and right path has more "../")s then left has entries, the leftover "../"s are carried over. ,"a/b" "../../../../../c" == "../../../c"b strong-pathReturns the most right member of the path once split by separators. If path is pointing to file, basename will be name of the file. If path is pointing to a directory, basename will be name of the directory. Check examples below to see how are special paths like .., ., / and similar resolved.$Examples (pseudocode): > basename "ab/c" == "c" > basename "file.txt" == "file.txt" > basename "../file.txt" == "file.txt" > basename "../.." == ".." > basename ".." == ".." > basename "." == "." > basename "/" == "."c strong-path:Enables you to redefine which dir is the path relative to.d strong-pathEnables you to rename the dir.e strong-pathEnables you to rename the file.f strong-pathConverts relative dir path to posix by replacing current path separators with posix path separators. If path is already posix, it will not change.,Works well for "normal" relative paths like "a\b\c" (Win) or "a/b/c" (Posix). If path is weird but still considered relative, like just "C:" on Win, results can be unexpected, most likely resulting with error thrown.g strong-pathConverts relative file path to posix, if it is not already posix. Check f( for more details, they behave the same.`abcdefg NoneS hijklmnopqrs None}  None9 GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs9 GHIJKLMNOPQRSTUVWXYZ[\]^_a`bcdefghijklmnopqrs    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq r s t u v w x y z { | }~strong-path-1.0.1.1-inplaceStrongPath.InternalStrongPath.Path StrongPathPaths_strong_pathStrongPath.FilePathStrongPath.OperationsFilePath StrongPath.THStrongPath.TypesFile'Dir'Rel'Path'SystemWindowsPosixFileDirRelAbs RelPathPrefix ParentDirNoPrefixPathRelDirRelFileAbsDirAbsFileRelDirWRelFileWAbsDirWAbsFileWRelDirPRelFilePAbsDirPAbsFilePparseRelFileFP parseRelDirFPextractRelPathPrefixprefixNumParentDirsrelPathNumParentDirs relPathPrefix impossible$fLiftLiftedRepSystem$fLiftLiftedRepWindows$fLiftLiftedRepPosix$fLiftLiftedRepFile$fLiftLiftedRepDir$fLiftLiftedRepRel$fLiftLiftedRepAbs $fShowPath$fEqPath$fLiftLiftedRepPath$fShowRelPathPrefix$fEqRelPathPrefix$fLiftLiftedRepRelPathPrefixfromPathRelDirfromPathRelFilefromPathAbsDirfromPathAbsFilefromPathRelDirWfromPathRelFileWfromPathAbsDirWfromPathAbsFileWfromPathRelDirPfromPathRelFilePfromPathAbsDirPfromPathAbsFileP toPathRelDir toPathRelFile toPathAbsDir toPathAbsFile toPathRelDirWtoPathRelFileW toPathAbsDirWtoPathAbsFileW toPathRelDirPtoPathRelFileP toPathAbsDirPtoPathAbsFileP parseRelDir parseRelFile parseAbsDir parseAbsFile parseRelDirW parseRelFileW parseAbsDirW parseAbsFileW parseRelDirP parseRelFileP parseAbsDirP parseAbsFileP toFilePath fromRelDir fromRelFile fromAbsDir fromAbsFile fromRelDirP fromRelFileP fromAbsDirP fromAbsFileP fromRelDirW fromRelFileW fromAbsDirW fromAbsFileWparentbasenamecastRelcastDircastFile relDirToPosixrelFileToPosixabsdirabsdirPabsdirWabsfileabsfilePabsfileWreldirreldirPreldirWrelfilerelfilePrelfileWversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName