úÎ,«(I      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHSafeAT Abstract over a file system rootsee +?A file system root can be interpreted as an (absolute) FilePathQConvert a Path to an absolute FilePath (using native style directory separators).!Type-level tag for unrooted paths:Unrooted paths need a root before they can be interpreted.PathsA  is simply a I© with a type-level tag indicating where this path is rooted (relative to the current directory, absolute path, relative to a web domain, whatever). Most operations on ? are just lifted versions of the operations on the underlying Iÿ0. The tag however allows us to give a lot of operations a more meaningful type. For instance, it does not make sense to append two absolute paths together; instead, we can only append an unrooted path to another path. It also means we avoid bugs where we use one kind of path where we expect another.Reinterpret the root of a pathAThis literally just changes the type-level tag; use with caution!Wrapped JWrapped KWrapped L Wrapped M!Wrapped N"Wrapped O#Reinterpret an unrooted pathThis is an alias for ; see comments there.$Forget a path's rootThis is an alias for ; see comments there.%YConvert a relative/unrooted Path to a FilePath (using POSIX style directory separators). See also &TConvert from a relative/unrooted FilePath (using POSIX style directory separators).'5A path fragment (like a single directory or filename)(Wrapped P)Wrapped Q)RSTU !"#$%&'()*+,-VWXY./012 !"#$%&'()*+,- !"#$%&'()*+,-&RSTU !"#$%&'()*+,-VWXY./012 Trustworthy6Wrapper around 67Wrapper around (openBinaryTempFileWithDefaultPermissionsCNOTE: The caller is responsible for cleaning up the temporary file.E,Return the immediate children of a directory Filters out "." and "..".F(Recursive traverse a directory structureÿ#Returns a set of paths relative to the directory specified. The list is lazily constructed, so that directories are only read when required. (This is also essential to ensure that this function does not build the entire result in memory before returning, potentially running out of heap.)6789:;<=>?@ABCDEFGOldNewHA   !"#$%&'()*+,-6789:;<=>?@ABCDEFGH%6789:;<=>?@ABCDEFGH  6789:;<=>?@ABCDEFGHZ      !!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR#QR$QR%QR&QR'QR(QRSQRTUVWXYZ[\] paths-0.1-9XWCOHu4lPJCA4Rb87BHOpSystem.Path.IO System.PathbaseGHC.IO.Handle.TypesHandle GHC.IO.HandlehSeek hSetBuffering hFileSizehCloseBlockBuffering LineBuffering NoBuffering BufferMode GHC.IO.Device SeekFromEnd RelativeSeek AbsoluteSeekSeekMode GHC.IO.IOMode ReadWriteMode AppendMode WriteModeReadModeIOModeFsPathFsRoottoAbsoluteFilePathHomeDirAbsoluteRelativeUnrootedPathcastRoot takeDirectory takeFileName<.>splitExtension takeExtensionrootPath unrootPathtoUnrootedFilePathfromUnrootedFilePathfragment joinFragmentssplitFragments toFilePath fromFilePath makeAbsolutefromAbsoluteFilePath$fNFDataFsPath$fFsRootHomeDir$fFsRootAbsolute$fFsRootRelative $fNFDataPath $fShowPath$fEqPath $fOrdPathwithFile openTempFile'readLazyByteStringreadStrictByteStringwriteLazyByteStringwriteStrictByteStringcopyFilecreateDirectorycreateDirectoryIfMissingremoveDirectory doesFileExistdoesDirectoryExistgetModificationTime removeFilegetTemporaryDirectorygetDirectoryContentsgetRecursiveContents renameFilegetCurrentDirectoryGHC.IOFilePathfilepath-1.4.1.0System.FilePath.PosixjoinPathsplitDirectories mkPathNative unPathNative mkPathPosix unPathPosixliftFPliftFP2 liftFromFPliftToFP