h*v      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0.8.1.3  Safe-Inferred"  Safe-Inferred %pathtypeThe character that separates directories. In the case where more than one character is possible,  is the 'ideal' one. +> Posix.isPathSeparator Posix.pathSeparatorpathtype$The list of all possible separators. 1> Posix.pathSeparator `elem` Posix.pathSeparatorspathtypeRather than using (== )5, use this. Test if something is a path separator. <> Posix.isPathSeparator a == (a `elem` Posix.pathSeparators)C  Safe-Inferred pathtypeWe cannot have a Component without phantom types plus a Tagged wrapper, because we need specialised Eq and Ord instances.  Safe-Inferred *DEFGHI  Safe-Inferred 5LpathtypeThis class allows selective behaviour for file and directory paths and is mostly for internal use.PpathtypeThis class allows selective behaviour for absolute and relative paths and is mostly for internal use.QpathtypeSee  /https://wiki.haskell.org/Closed_world_instances for the used technique.pathtypeThis class provides a way to prevent other modules from making further N or J instances%JKLMNOPQ Safe-Inferredhgpathtype+This is the main filepath abstract datatypehpathtype$Map over the components of the path.Path.pathMap (map toLower) (absDir "/tmp/Reports/SpreadSheets") == Posix.absDir "/tmp/reports/spreadsheets"pathtypeCurrently not exportedpathtypeCurrently not exportedkpathtype Convert the g into a plain  as required for OS calls.;\p -> Path.asPath (Path.toString p) == (p::Default.AbsFile)lpathtype Synonym of k intended for unqualified use.opathtypeThis is a file with path "". You will not be able to create a file with this name. We also forbid parsing "" by u. You might only need this file path as intermediate step when manipulating extensions of files like  ".bashrc".ppathtypeThis function is intended for checking and parsing paths provided as user input.fmap Posix.toString (Posix.maybePath "/" :: Maybe Posix.AbsDir) == Just "/"fmap Posix.toString (Posix.maybePath "/" :: Maybe Posix.AbsFile) == Nothingfmap Posix.toString (Posix.maybePath "/" :: Maybe Posix.RelDir) == Nothingfmap Posix.toString (Posix.maybePath "/" :: Maybe Posix.RelFile) == Nothingfmap Posix.toString (Posix.maybePath "/tmp" :: Maybe Posix.AbsDir) == Just "/tmp"fmap Posix.toString (Posix.maybePath "/tmp" :: Maybe Posix.AbsFile) == Just "/tmp"fmap Posix.toString (Posix.maybePath "/tmp" :: Maybe Posix.RelDir) == Nothingfmap Posix.toString (Posix.maybePath "/tmp" :: Maybe Posix.RelFile) == Nothingfmap Posix.toString (Posix.maybePath "/tmp/" :: Maybe Posix.AbsDir) == Just "/tmp"fmap Posix.toString (Posix.maybePath "/tmp/" :: Maybe Posix.AbsFile) == Nothingfmap Posix.toString (Posix.maybePath "/tmp/" :: Maybe Posix.RelDir) == Nothingfmap Posix.toString (Posix.maybePath "/tmp/" :: Maybe Posix.RelFile) == Nothingfmap Posix.toString (Posix.maybePath "/tmp" :: Maybe Posix.AbsRelFileDir) == Just "/tmp"fmap Posix.toString (Posix.maybePath "/tmp/" :: Maybe Posix.AbsRelFileDir) == Just "/tmp"fmap Posix.toString (Posix.maybePath "file.txt" :: Maybe Posix.RelFile) == Just "file.txt"fmap Posix.toString (Posix.maybePath "file.txt" :: Maybe Posix.AbsFile) == Nothingfmap Windows.toString (Windows.maybePath "\\tmp" :: Maybe Windows.AbsDir) == Just "\\tmp"fmap Windows.toString (Windows.maybePath "a:\\tmp" :: Maybe Windows.AbsDir) == Just "a:\\tmp"fmap Windows.toString (Windows.maybePath "a:tmp" :: Maybe Windows.AbsDir) == Just "a:tmp"fmap Windows.toString (Windows.maybePath "a:\\" :: Maybe Windows.AbsDir) == Just "a:\\"fmap Windows.toString (Windows.maybePath "a:" :: Maybe Windows.AbsDir) == Just "a:"fmap Windows.toString (Windows.maybePath "tmp" :: Maybe Windows.RelDir) == Just "tmp"fmap Windows.toString (Windows.maybePath "\\tmp" :: Maybe Windows.RelDir) == Nothingfmap Windows.toString (Windows.maybePath "a:\\tmp" :: Maybe Windows.RelDir) == Nothingfmap Windows.toString (Windows.maybePath "a:tmp" :: Maybe Windows.RelDir) == Nothingfmap Windows.toString (Windows.maybePath "tmp" :: Maybe Windows.AbsDir) == NothingqpathtypeThis function is intended for checking and parsing paths provided as user input.fmap Posix.toString (Posix.maybePath "/" :: Maybe Posix.AbsDir) == Just "/"fmap Posix.toString (Posix.maybePath "/" :: Maybe Posix.AbsFile) == Nothingfmap Posix.toString (Posix.maybePath "/" :: Maybe Posix.RelDir) == Nothingfmap Posix.toString (Posix.maybePath "/" :: Maybe Posix.RelFile) == Nothingfmap Posix.toString (Posix.maybePath "/tmp" :: Maybe Posix.AbsDir) == Just "/tmp"fmap Posix.toString (Posix.maybePath "/tmp" :: Maybe Posix.AbsFile) == Just "/tmp"fmap Posix.toString (Posix.maybePath "/tmp" :: Maybe Posix.RelDir) == Nothingfmap Posix.toString (Posix.maybePath "/tmp" :: Maybe Posix.RelFile) == Nothingfmap Posix.toString (Posix.maybePath "/tmp/" :: Maybe Posix.AbsDir) == Just "/tmp"fmap Posix.toString (Posix.maybePath "/tmp/" :: Maybe Posix.AbsFile) == Nothingfmap Posix.toString (Posix.maybePath "/tmp/" :: Maybe Posix.RelDir) == Nothingfmap Posix.toString (Posix.maybePath "/tmp/" :: Maybe Posix.RelFile) == Nothingfmap Posix.toString (Posix.maybePath "/tmp" :: Maybe Posix.AbsRelFileDir) == Just "/tmp"fmap Posix.toString (Posix.maybePath "/tmp/" :: Maybe Posix.AbsRelFileDir) == Just "/tmp"fmap Posix.toString (Posix.maybePath "file.txt" :: Maybe Posix.RelFile) == Just "file.txt"fmap Posix.toString (Posix.maybePath "file.txt" :: Maybe Posix.AbsFile) == Nothingfmap Windows.toString (Windows.maybePath "\\tmp" :: Maybe Windows.AbsDir) == Just "\\tmp"fmap Windows.toString (Windows.maybePath "a:\\tmp" :: Maybe Windows.AbsDir) == Just "a:\\tmp"fmap Windows.toString (Windows.maybePath "a:tmp" :: Maybe Windows.AbsDir) == Just "a:tmp"fmap Windows.toString (Windows.maybePath "a:\\" :: Maybe Windows.AbsDir) == Just "a:\\"fmap Windows.toString (Windows.maybePath "a:" :: Maybe Windows.AbsDir) == Just "a:"fmap Windows.toString (Windows.maybePath "tmp" :: Maybe Windows.RelDir) == Just "tmp"fmap Windows.toString (Windows.maybePath "\\tmp" :: Maybe Windows.RelDir) == Nothingfmap Windows.toString (Windows.maybePath "a:\\tmp" :: Maybe Windows.RelDir) == Nothingfmap Windows.toString (Windows.maybePath "a:tmp" :: Maybe Windows.RelDir) == Nothingfmap Windows.toString (Windows.maybePath "tmp" :: Maybe Windows.AbsDir) == NothingtpathtypeThis function is intended for converting path strings with known content, e.g. string literals, to the g type.upathtype Construct a e from a .7Posix.toString (Posix.relFile "file.txt") == "file.txt"-Posix.toString (Posix.relFile "tmp") == "tmp"vpathtype Construct a c from a .(Posix.toString (Posix.relDir ".") == "."6Posix.toString (Posix.relDir "file.txt") == "file.txt",Posix.toString (Posix.relDir "tmp") == "tmp"wpathtype Construct an f from a .9Posix.toString (Posix.absFile "/file.txt") == "/file.txt"/Posix.toString (Posix.absFile "/tmp") == "/tmp"xpathtype Construct an d from a .8Posix.toString (Posix.absDir "/file.txt") == "/file.txt".Posix.toString (Posix.absDir "/tmp") == "/tmp"ypathtypeConstruct a 'Rel fd' from a .zpathtypeConstruct an 'Abs fd' from a .{pathtype Construct an 'AbsRel fd' from a .|pathtypeConstruct a 'File ar' from a .}pathtypeConstruct a 'Dir ar' from a .~pathtype Construct a 'FileDir ar' from a .pathtype Construct a 'RelPath fd' from a .pathtype!Construct an 'AbsPath fd' from a .pathtype!Construct a 'FilePath ar' from a .pathtype Construct a 'DirPath ar' from a .pathtypeUse a  as a g whose type is determined by its context. You should not use this and other as* functions, since they may silently turn a relative path to an absolute one, or vice versa, or they may accept a path as file path although it ends on a slash. If you are certain about the string content then you should use t2. If you got the string as user input then use q or s.*Posix.asPath "/tmp" == Posix.absDir "/tmp"3Posix.asPath "file.txt" == Posix.relFile "file.txt"'Path.isAbsolute (Posix.asAbsDir "/tmp")'Path.isRelative (Posix.asRelDir "/tmp")>Posix.toString (Posix.asPath "/tmp" :: Posix.AbsDir) == "/tmp"=Posix.toString (Posix.asPath "/tmp" :: Posix.RelDir) == "tmp"Windows.toString (Windows.asPath "\\tmp" :: Windows.AbsDir) == "\\tmp"Windows.toString (Windows.asPath "a:\\tmp" :: Windows.AbsDir) == "a:\\tmp"Windows.toString (Windows.asPath "a:tmp" :: Windows.AbsDir) == "a:tmp"Windows.toString (Windows.asPath "tmp" :: Windows.RelDir) == "tmp"pathtypeUse a  as a e. No checking is done.9Posix.toString (Posix.asRelFile "file.txt") == "file.txt":Posix.toString (Posix.asRelFile "/file.txt") == "file.txt"/Posix.toString (Posix.asRelFile "tmp") == "tmp"0Posix.toString (Posix.asRelFile "/tmp") == "tmp"pathtypeUse a  as a c. No checking is done.*Posix.toString (Posix.asRelDir ".") == "."8Posix.toString (Posix.asRelDir "file.txt") == "file.txt"9Posix.toString (Posix.asRelDir "/file.txt") == "file.txt".Posix.toString (Posix.asRelDir "tmp") == "tmp"/Posix.toString (Posix.asRelDir "/tmp") == "tmp"pathtypeUse a  as an f. No checking is done.;Posix.toString (Posix.asAbsFile "/file.txt") == "/file.txt"1Posix.toString (Posix.asAbsFile "/tmp") == "/tmp"pathtypeUse a  as an d. No checking is done.:Posix.toString (Posix.asAbsDir "/file.txt") == "/file.txt"0Posix.toString (Posix.asAbsDir "/tmp") == "/tmp"pathtypeUse a ( as a 'RelPath fd'. No checking is done.pathtypeUse a ) as an 'AbsPath fd'. No checking is done.pathtypeUse a ) as a 'FilePath ar'. No checking is done.pathtypeUse a ( as a 'DirPath ar'. No checking is done.pathtypeExamines the supplied string and constructs an absolute or relative path as appropriate.8Path.mkPathAbsOrRel "/tmp" == Left (Posix.absDir "/tmp")8Path.mkPathAbsOrRel "tmp" == Right (Posix.relDir "tmp") uncurry Path.mkPathFromComponents (Path.pathComponents p) == (p::Default.AbsDir)pathtypeInfix variant of .Posix.toString (Posix.absDir "/tmp" Posix.relFile "file.txt") == "/tmp/file.txt"Posix.toString (Posix.absDir "/tmp" Posix.relDir "dir" Posix.relFile "file.txt") == "/tmp/dir/file.txt"Posix.toString (Posix.relDir "dir" Posix.relFile "file.txt") == "dir/file.txt"Windows.toString (Windows.absDir "\\tmp" Windows.relFile "file.txt") == "\\tmp\\file.txt"Windows.toString (Windows.absDir "c:\\tmp" Windows.relFile "file.txt") == "c:\\tmp\\file.txt"Windows.toString (Windows.absDir "c:tmp" Windows.relFile "file.txt") == "c:tmp\\file.txt"Windows.toString (Windows.absDir "c:\\" Windows.relDir "tmp" Windows.relFile "file.txt") == "c:\\tmp\\file.txt"Windows.toString (Windows.absDir "c:" Windows.relDir "tmp" Windows.relFile "file.txt") == "c:tmp\\file.txt"Windows.toString (Windows.relDir "dir" Windows.relFile "file.txt") == "dir\\file.txt"pathtypeInfix variant of . We only allow files (and not directories) to have extensions added by this function. This is because it's the vastly common case and an attempt to add one to a directory will - more often than not - represent an error. We don't however want to prevent the corresponding operation on directories, and so we provide a function that is more flexible: .pathtype>Add an extension, even if there is already one there. E.g. -addExtension "foo.txt" "bat" -> "foo.txt.bat".Path.addExtension (relFile "file.txt") "bib" == Posix.relFile "file.txt.bib"Path.addExtension (relFile "file.") ".bib" == Posix.relFile "file..bib"Path.addExtension (relFile "file") ".bib" == Posix.relFile "file.bib">Path.addExtension Path.emptyFile "bib" == Posix.relFile ".bib"?Path.addExtension Path.emptyFile ".bib" == Posix.relFile ".bib"Path.takeFileName (Path.addExtension Path.emptyFile "ext") == Posix.relFile ".ext"pathtypeJoin an (absolute or relative) directory path with a relative (file or directory) path to form a new path.;\p -> Path.combine Path.currentDir p == (p::Default.RelDir)pathtype0Remove last extension, and the "." preceding it.forAllAbsRel $ \x -> Path.dropExtension x == fst (Path.splitExtension x)pathtypeDrop all extensionsforAllAbsRel $ \x -> not $ Path.hasAnExtension (Path.dropExtensions x)pathtype Synonym for pathtypeSet the extension of a file, overwriting one if already present.Path.replaceExtension (relFile "file.txt") ".bob" == Posix.relFile "file.bob"Path.replaceExtension (relFile "file.txt") "bob" == Posix.relFile "file.bob"Path.replaceExtension (relFile "file") ".bob" == Posix.relFile "file.bob"Path.replaceExtension (relFile "file.txt") "" == Posix.relFile "file"Path.replaceExtension (relFile "file.fred.bob") "txt" == Posix.relFile "file.fred.txt"pathtypeSplit on the extension.  is the inverse.?forAllAbsRel $ \x -> uncurry (<.>) (Path.splitExtension x) == xforAllAbsRel $ \x -> uncurry Path.addExtension (Path.splitExtension x) == xPath.splitExtension (relFile "file.txt") == (Posix.relFile "file",".txt")Path.splitExtension (relFile ".bashrc") == (Posix.emptyFile, ".bashrc")Path.splitExtension (relFile "file") == (Posix.relFile "file","")Path.splitExtension (relFile "file/file.txt") == (Posix.relFile "file/file",".txt")Path.splitExtension (relFile "file.txt/boris") == (Posix.relFile "file.txt/boris","")Path.splitExtension (relFile "file.txt/boris.ext") == (Posix.relFile "file.txt/boris",".ext")Path.splitExtension (relFile "file/path.txt.bob.fred") == (Posix.relFile "file/path.txt.bob",".fred")pathtypeSplit on all extensionsPath.splitExtensions (relFile "file.tar.gz") == (Posix.relFile "file",".tar.gz")\p -> uncurry (<.>) (Path.splitExtension p) == (p::Default.AbsFile)pathtype\p -> uncurry Path.combine (Path.splitFileName p) == (p::Default.AbsFile)pathtype \p -> (uncurry Path.combine <$> Path.splitDirName p) == toMaybe (not $ Default.isDrive p) (p::Default.AbsDir)pathtypeGet the basename of a filePath.takeBaseName (absFile "/tmp/somedir/myfile.txt") == Posix.relFile "myfile"Path.takeBaseName (relFile "./myfile.txt") == Posix.relFile "myfile"Path.takeBaseName (relFile "myfile.txt") == Posix.relFile "myfile"pathtype%Get the extension of a file, returns "" for no extension, .ext otherwise.forAllAbsRel $ \x -> Path.takeExtension x == snd (Path.splitExtension x)forAllAbsRel $ \x -> Path.takeExtension (Path.addExtension x "ext") == ".ext"forAllAbsRel $ \x -> Path.takeExtension (Path.replaceExtension x "ext") == ".ext"pathtypeGet all extensions>Path.takeExtensions (Posix.relFile "file.tar.gz") == ".tar.gz"pathtypeGet the filename component of a file path (ie stripping all parent dirs)Path.takeFileName (absFile "/tmp/somedir/myfile.txt") == Posix.relFile "myfile.txt"Path.takeFileName (relFile "./myfile.txt") == Posix.relFile "myfile.txt"Path.takeFileName (relFile "myfile.txt") == Posix.relFile "myfile.txt"\p -> Path.toString (Path.takeFileName p) `isSuffixOf` Path.toString (p::Default.AbsFile)pathtype \p -> fmap (\d -> toString d `isSuffixOf` toString p) (takeDirName p) == toMaybe (not $ isDrive p) Truepathtype2Check whether two strings are equal as file paths.'Posix.equalFilePath "abc/def" "abc/def"(Posix.equalFilePath "abc/def" "abc//def""Posix.equalFilePath "/tmp/" "/tmp""Posix.equalFilePath "/tmp" "//tmp"#Posix.equalFilePath "/tmp" "///tmp"%not $ Posix.equalFilePath "abc" "def"¬ $ Posix.equalFilePath "/tmp" "tmp"+Windows.equalFilePath "abc\\def" "abc\\def"-Windows.equalFilePath "abc\\def" "abc\\\\def"#Windows.equalFilePath "file" "File")Windows.equalFilePath "\\file" "\\\\file"+Windows.equalFilePath "\\file" "\\\\\\file"'not $ Windows.equalFilePath "abc" "def"(not $ Windows.equalFilePath "file" "dir"pathtype Constructs a V from a list of components. It is an unchecked error if the path components contain path separators. It is an unchecked error if a e path is empty.Path.joinPath ["tmp","someDir","dir"] == Posix.relDir "tmp/someDir/dir"Path.joinPath ["tmp","someDir","file.txt"] == Posix.relFile "tmp/someDir/file.txt"pathtypeCurrently just transforms:Path.normalise (absFile "/tmp/fred/./jim/./file") == Posix.absFile "/tmp/fred/jim/file"pathtype(Deconstructs a path into its components.Path.splitPath (Posix.absDir "/tmp/someDir/mydir.dir") == (True, map relDir ["tmp","someDir","mydir.dir"], Nothing)Path.splitPath (Posix.absFile "/tmp/someDir/myfile.txt") == (True, map relDir ["tmp","someDir"], Just $ relFile "myfile.txt")pathtypeThis function can be used to construct a relative path by removing the supplied d! from the front. It is a runtime  if the supplied W doesn't start with the d.Path.makeRelative (absDir "/tmp/somedir") (absFile "/tmp/somedir/anotherdir/file.txt") == Posix.relFile "anotherdir/file.txt"Path.makeRelative (absDir "/tmp/somedir") (absDir "/tmp/somedir/anotherdir/dir") == Posix.relDir "anotherdir/dir"Path.makeRelative (absDir "c:\\tmp\\somedir") (absFile "C:\\Tmp\\SomeDir\\AnotherDir\\File.txt") == Windows.relFile "AnotherDir\\File.txt"Path.makeRelative (absDir "c:\\tmp\\somedir") (absDir "c:\\tmp\\somedir\\anotherdir\\dir") == Windows.relDir "anotherdir\\dir"Path.makeRelative (absDir "c:tmp\\somedir") (absDir "c:tmp\\somedir\\anotherdir\\dir") == Windows.relDir "anotherdir\\dir"pathtypeJoins an absolute directory with a relative path to construct a new absolute path.Path.makeAbsolute (absDir "/tmp") (relFile "file.txt") == Posix.absFile "/tmp/file.txt"Path.makeAbsolute (absDir "/tmp") (relFile "adir/file.txt") == Posix.absFile "/tmp/adir/file.txt"Path.makeAbsolute (absDir "/tmp") (relDir "adir/dir") == Posix.absDir "/tmp/adir/dir"\base p -> Default.toString p `isSuffixOf` Path.toString (Path.makeAbsolute base (Path.idFile p))\base p -> Default.toString base `isPrefixOf` Path.toString (Path.makeAbsolute base (Path.idFile p))pathtypeConverts a relative path into an absolute one by prepending the current working directory.pathtypeAs for , but for use when the path may already be absolute (in which case it is left unchanged). You should avoid the use of -type functions, because then you avoid to absolutize a path that was already absolutized.Path.genericMakeAbsolute (absDir "/tmp") (relFile "file.txt") == Posix.absFile "/tmp/file.txt"Path.genericMakeAbsolute (absDir "/tmp") (relFile "adir/file.txt") == Posix.absFile "/tmp/adir/file.txt"Path.genericMakeAbsolute (absDir "/tmp") (absFile "/adir/file.txt") == Posix.absFile "/adir/file.txt"pathtypeAs for , but for use when the path may already be absolute (in which case it is left unchanged).pathtypeConvert a file to a directory path. Obviously, the corresponding disk object won't change accordingly. The purpose of this function is to be an intermediate step when deriving a directory name from a file name.pathtype null (Path.takeExtension x) == not (Path.hasAnExtension x)pathtype1Does the given filename have the given extension?3Path.hasExtension ".hs" (Posix.relFile "MyCode.hs")7Path.hasExtension ".hs" (Posix.relFile "MyCode.bak.hs")=not $ Path.hasExtension ".hs" (Posix.relFile "MyCode.hs.bak")pathtypePart.File extension characterPosix.extSeparator == '.'pathtypeThe character that is used to separate the entries in the $PATH environment variable.pathtype(Is the character an extension character?9\a -> Posix.isExtSeparator a == (a == Posix.extSeparator)pathtype"Is the character a file separator?\a -> Posix.isSearchPathSeparator a == (a == Posix.searchPathSeparator)pathtype#This is a more flexible variant of  / , which can work with files or directories?Path.genericAddExtension (absDir "/") "x" == Posix.absDir "/.x"Path.genericAddExtension (absDir "/a") "x" == Posix.absDir "/a.x"Path.genericAddExtension Path.emptyFile "x" == Posix.relFile ".x"=Path.genericAddExtension Path.emptyFile "" == Posix.emptyFilepathtype4Check internal integrity of the path data structure.pathtypeCurrently it also parses Part.AbsRel and Part.FileDir paths, although these cannot be composed with the accepted combinators.pathtypeWe show and parse file path components using the rather generic  smart constructor instead of u, v and relPath str :: FileDirPath ar%. Otherwise handling of all cases of F, E and D" types becomes pretty complicated.1Posix.rootDir relDir "bla" relFile "blub",rootDir relPath "bla" relPath "blub"8Just (Posix.rootDir relDir "bla" relFile "blub")3Just (rootDir relPath "bla" relPath "blub")4Posix.currentDir relDir "bla" relFile "blub"/currentDir relPath "bla" relPath "blub";Just (Posix.currentDir relDir "bla" relFile "blub")6Just (currentDir relPath "bla" relPath "blub")7Windows.absDir "c:" relDir "bla" relFile "blub"0absDir "c:" relPath "bla" relPath "blub"Just (Windows.absDir "c:\\" relDir "bla" relFile "blub")9Just (absDir "c:\\" relPath "bla" relPath "blub")pathtypeForbid use of OverloadedStrings and prevent custom orphan instancesgfedcba`_^W]V\U[TZSYRXijklmnoqpsrtuvwxyz|}{~hC577 Safe-InferrediU[gfedc]\Zba`_YX^WVTSRzptqrsuvwxy{|}~mnokijlhCU[gfedc]\Zba`_YX^WVTSRzptqrsuvwxy{|}~mnokijlhC Safe-Inferredk Safe-InferredkIHGFEDIHGFED Safe-InferredkPQNOLMJKPQNOLMJK Safe-Inferredl#5 Safe-Inferredm pathtypeThis is largely for  compatibilitypathtypeThis is largely for  compatibilitypathtypeThis is largely for  compatibility Safe-InferrednD Safe-Inferrednijlhijlh Safe-InferredpA !"#$ &/'() *+,-.03125?%@<6789:;>=4A !"#$ &/'() *+,-.03125?%@<6789:;>=4 Safe-InferredtRpathtypeRetrieve the contents of a directory without any directory prefixes. In contrast to ,, exclude special directories "." and "..".pathtypeRetrieve the contents of a directory path (which may be relative) as absolute pathspathtypeReturns paths relative to the supplied (abs or relative) directory path. eg (for current working directory of /somewhere/cwd/): show (relDirectoryContents "d/e/f/") == (["subDir1A","subDir1B"], ["file1A","file1B"])pathtypeA convenient alternative to  if you only want files.pathtypeA convenient alternative to  if you only want directories.BB Safe-InferredupathtypeThis is largely for  compatibilitypathtypeThis is largely for  compatibilitypathtypeThis is largely for  compatibility !"#$%&%'%(%)*+,-./01232425262728292:2;2<2=.>.?0@0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0VWXYZ[\]^_`abcde  f g h i j k l m f n o p i qrstuvfighjkwxyz{|}~rstuvfighjkwxyz{|}~rstuvfighjkwxyz{|}~                           f g h   j k             g  h  j  k            'pathtype-0.8.1.3-8hTR6LExFgkDd5IqA3WEK1System.Path.IOSystem.Path.DirectorySystem.Path.GenericSystem.Path.PartSystem.Path.PartClassSystem.Path.PosixSystem.Path.WindowspathtypeSystem.Path.Internal.SeparatorSystem.Path.Internal.SystemSystem.Path.Internal.ComponentSystem.Path.Internal.PartSystem.Path.Internal.PartClassSystem.Path.InternalSystem.Path.ModificationTimeSystem.Path.RegularExpressionSystemFilePathSystem.Path.Host System.PathSystem.DirectorygetDirectoryContentsbase System.IOprintghc-prim GHC.TypesIOGHC.IO.Handle.TypesHandle GHC.IO.IOModeIOModeReadMode WriteMode AppendMode ReadWriteMode GHC.IO.DeviceSeekMode AbsoluteSeek RelativeSeek SeekFromEnd BufferMode NoBuffering LineBufferingBlockBufferingGHC.IO.StdHandlesstdout GHC.IO.HandlehFlushGHC.IO.Handle.Text hWaitForInputhGetCharhGetLine hGetContentshPutCharhPutStr hPutStrLnhPutBufhPutBufNonBlockinghGetBufhGetBufNonBlockingstdinstderr HandlePosnhClose hFileSize hSetFileSizehIsEOFisEOF hLookAhead hSetBufferinghGetPosnhSetPosnhSeekhTellhIsOpen hIsClosed hIsReadable hIsWritable hGetBuffering hIsSeekablehSetEchohGetEchohIsTerminalDevicehSetBinaryModehShowputCharputStrputStrLngetChargetLine getContentsinteractreadLnreadIOhReadyhPrintfixIOdirectory-1.3.8.1 System.Directory.Internal.Common PermissionsFileDirDirFileAbsRelRelAbs FileOrDirswitchFileOrDir switchFileDirAbsOrRelswitchAbsOrRel switchAbsRel FileDirPath AbsRelPathDirPathRelPathAbsPath AbsRelFileDir RelFileDir AbsFileDir AbsRelDir AbsRelFileRelDirAbsDirRelFileAbsFilePathpathMap withAbsRel withFileDirtoString getPathStringrootDir currentDir emptyFilemaybe maybePathparse parsePathpathrelFilerelDirabsFileabsDirrelabsabsRelfiledirfileDirrelPathabsPathfilePathdirPathidAbsRelidAbsidRel idFileDiridFileidDirasPath asRelFileasRelDir asAbsFileasAbsDir asRelPath asAbsPath asFilePath asDirPathmkPathAbsOrRelmkPathFileOrDir mkAbsPathmkAbsPathFromCwd<.><++> addExtensioncombine dropExtensiondropExtensions dropFileNamereplaceExtensionreplaceBaseNamereplaceDirectoryreplaceFileNamesplitExtensionsplitExtensions splitFileName splitDirName takeBaseName takeDirectorytakeSuperDirectory takeExtensiontakeExtensions takeFileName takeDirName mapFileName mapFileNameF equalFilePathjoinPath normalise splitPath makeRelativemakeRelativeMaybe makeAbsolutemakeAbsoluteFromCwddynamicMakeAbsolutedynamicMakeAbsoluteFromCwdgenericMakeAbsolutegenericMakeAbsoluteFromCwd dirFromFile fileFromDir toFileDir fromFileDirfileFromFileDirdirFromFileDirtoAbsRel fromAbsRel isAbsolute isRelativeisAbsoluteStringisRelativeStringhasAnExtension hasExtension extSeparatorsearchPathSeparatorisExtSeparatorisSearchPathSeparatorgenericAddExtensiongenericDropExtensiongenericDropExtensionsgenericSplitExtensiongenericSplitExtensionsgenericTakeExtensiongenericTakeExtensionsisValid pathSeparatorpathSeparatorsisPathSeparatoraddTrailingPathSeparatordropTrailingPathSeparatorhasTrailingPathSeparatortestAll $fSystemPosixwithFileopenFilereadFile writeFile appendFilewithBinaryFileopenBinaryFile openTempFileopenBinaryTempFilecreateDirectorycreateDirectoryIfMissingremoveDirectoryremoveDirectoryRecursiverenameDirectoryabsDirectoryContentsrelDirectoryContents filesInDir dirsInDirgetCurrentDirectorysetCurrentDirectorygetHomeDirectorygetAppUserDataDirectorygetUserDocumentsDirectorygetTemporaryDirectory removeFile renameFilecopyFilecanonicalizePathmakeRelativeToCurrentDirectoryfindExecutable doesFileExistdoesDirectoryExistgetPermissionssetPermissionsgetModificationTime$fSystemWindows extension searchPath isExtension isSearchPathgenDrive splitAbsolute canonicalize splitDrive GenComponentGeneric Componentempty applyCompretaguntagmapmapF_splitExtensionRelOAbsOabsPCfileMapPrivate WrapFileDir unwrapFileDir WrapAbsRel unwrapAbsRelFuncArg runFuncArg switchDir switchFile switchRel switchAbsrelVardirVar withFileOrDirfdMap inspectAbsRelinspectFileDireitherFromAbsRel_eitherFromFileDirGHC.BaseStringmkPathAbsOrRelPriv GHC.MaybeNothingmakePathComponentspathComponentsGHC.Errerror $fReadPath $fShowPath$fIsStringPath convertTimeParser-|-singlerun