dirSeparator : Char
The character that separates directories in the path.
Visibility: exportpathSeparator : Char
The character that separates multiple paths.
Visibility: exportdata Volume : Type
Windows path prefix.
Totality: total
Visibility: public export
Constructors:
UNC : String -> String -> Volume
Windows Uniform Naming Convention, consisting of server name and share
directory.
Example: `\\localhost\share`
Disk : Char -> Volume
The drive.
Example: `C:`
Hints:
Eq Volume
Show Volume
data Body : Type
A single body in path.
Totality: total
Visibility: public export
Constructors:
CurDir : Body
Represents ".".
ParentDir : Body
Represents "..".
Normal : String -> Body
Directory or file.
Hints:
Eq Body
Show Body
record Path : Type
A parsed cross-platform file system path.
Use the function `parse` to constructs a Path from String, and use the
function `show` to convert in reverse.
Trailing separator is only used for display and is ignored when comparing
paths.
Totality: total
Visibility: public export
Constructor: MkPath : Maybe Volume -> Bool -> List Body -> Bool -> Path
Projections:
.body : Path -> List Body
Path bodies.
.hasRoot : Path -> Bool
Whether the path contains root.
.hasTrailSep : Path -> Bool
Whether the path terminates with a separator.
.volume : Path -> Maybe Volume
Windows path prefix (only for Windows).
Hints:
Eq Path
Show Path
.volume : Path -> Maybe Volume
Windows path prefix (only for Windows).
Visibility: public exportvolume : Path -> Maybe Volume
Windows path prefix (only for Windows).
Visibility: public export.hasRoot : Path -> Bool
Whether the path contains root.
Visibility: public exporthasRoot : Path -> Bool
Whether the path contains root.
Visibility: public export.body : Path -> List Body
Path bodies.
Visibility: public exportbody : Path -> List Body
Path bodies.
Visibility: public export.hasTrailSep : Path -> Bool
Whether the path terminates with a separator.
Visibility: public exporthasTrailSep : Path -> Bool
Whether the path terminates with a separator.
Visibility: public exportemptyPath : Path
An empty path, which represents "".
Visibility: public exporttryParse : String -> Maybe Path
- Visibility: export
parse : String -> Path
Parses a String into Path.
The string is parsed as much as possible from left to right, and the invalid
parts on the right is ignored.
Some kind of invalid paths are accepted. The relax rules:
- Both slash('/') and backslash('\\') are parsed as valid directory separator,
regardless of the platform;
- Any characters in the body in allowed, e.g., glob like "/root/*";
- Verbatim prefix(`\\?\`) that disables the forward slash is ignored (for
Windows only).
- Repeated separators are ignored, therefore, "a/b" and "a//b" both have "a"
and "b" as bodies.
- "." in the body are removed, unless they are at the beginning of the path.
For example, "a/./b", "a/b/", "a/b/." and "a/b" will have "a" and "b" as
bodies, and "./a/b" will starts with `CurDir`.
```idris example
parse "C:\\Windows/System32"
parse "/usr/local/etc/*"
```
Visibility: exportsplitFileName : String -> (String, String)
- Visibility: export
splitExtensions : String -> (String, List String)
Split a file name into a basename and a list of extensions.
A leading dot is considered to be part of the basename.
```
splitExtensions "Path.idr" = ("Path", ["idr"])
splitExtensions "file.latex.lidr" = ("file", ["latex", "lidr"])
splitExtensions ".hidden.latex.lidr" = (".hidden", ["latex", "lidr"])
```
Visibility: exportisAbsolute : String -> Bool
Returns true if the path is absolute.
- On Unix, a path is absolute if it starts with the root, so `isAbsolute` and
`hasRoot` are equivalent.
- On Windows, a path is absolute if it starts with a disk and has root or
starts with UNC. For example, `c:\\windows` is absolute, while `c:temp`
and `\temp` are not.
Visibility: exportisRelative : String -> Bool
Returns true if the path is relative.
Visibility: export(/>) : Path -> String -> Path
Appends the right path to the left path.
If the path on the right is absolute, it replaces the left path.
On Windows:
- If the right path has a root but no volume (e.g., `\windows`), it replaces
everything except for the volume (if any) of left.
- If the right path has a volume but no root, it replaces left.
```idris example
parse "/usr" /> "local/etc" == "/usr/local/etc"
```
Visibility: export
Fixity Declaration: infixl operator, level 5(</>) : String -> String -> String
Appends the right path to the left path.
If the path on the right is absolute, it replaces the left path.
On Windows:
- If the right path has a root but no volume (e.g., `\windows`), it replaces
everything except for the volume (if any) of left.
- If the right path has a volume but no root, it replaces left.
```idris example
"/usr" </> "local/etc" == "/usr/local/etc"
```
Visibility: export
Fixity Declaration: infixl operator, level 5joinPath : List String -> String
Joins path components into one.
```idris example
joinPath ["/usr", "local/etc"] == "/usr/local/etc"
```
Visibility: exportsplitPath : String -> List String
Splits path into components.
```idris example
splitPath "/usr/local/etc" == ["/", "usr", "local", "etc"]
splitPath "tmp/Foo.idr" == ["tmp", "Foo.idr"]
```
Visibility: exportsplitParent : String -> Maybe (String, String)
Splits the path into parent and child.
```idris example
splitParent "/usr/local/etc" == Just ("/usr/local", "etc")
```
Visibility: exportparent : String -> Maybe String
Returns the path without its final component, if there is one.
Returns Nothing if the path terminates by a root or volume.
Visibility: exportparents : String -> List String
Returns the list of all parents of the path, longest first, self included.
```idris example
parents "/etc/kernel" == ["/etc/kernel", "/etc", "/"]
```
Visibility: exportisBaseOf : String -> String -> Bool
Determines whether the base is one of the parents of target.
Trailing separator is ignored.
```idris example
"/etc" `isBaseOf` "/etc/kernel"
```
Visibility: exportdropBase : String -> String -> Maybe String
Returns a path that, when appended to base, yields target.
Returns Nothing if the base is not a prefix of the target.
Visibility: exportfileName : String -> Maybe String
Returns the last body of the path.
If the last body is a file, this is the file name;
if it's a directory, this is the directory name;
if it's ".", it recurses on the previous body;
if it's "..", returns Nothing.
Visibility: exportfileStem : String -> Maybe String
Extracts the file name in the path without extension.
The stem is:
- Nothing, if there is no file name;
- The entire file name if there is no embedded ".";
- The entire file name if the file name begins with a "." and has no other ".";
- Otherwise, the portion of the file name before the last ".".
Visibility: exportextension : String -> Maybe String
Extracts the extension of the file name in the path.
The extension is:
- Nothing, if there is no file name;
- Nothing, if there is no embedded ".";
- Nothing, if the file name begins with a "." and has no other ".";
- Otherwise, the portion of the file name after the last ".".
Visibility: exportextensions : String -> Maybe (List String)
Extracts the list of extensions of the file name in the path.
The returned value is:
- Nothing, if there is no file name;
- Just [], if there is no embedded ".";
- Just [], if the filename begins with a "." and has no other ".";
- Just es, the portions between the "."s (excluding a potential leading one).
Visibility: exportsetFileName : String -> String -> String
Updates the file name in the path.
If there is no file name, it appends the name to the path;
otherwise, it appends the name to the parent of the path.
Visibility: export(<.>) : String -> String -> String
Appends a extension to the path.
If there is no file name, the path will not change;
if the path has no extension, the extension will be appended;
if the given extension is empty, the extension of the path will be dropped;
otherwise, the extension will be replaced.
```idris example
"/tmp/Foo" <.> "idr" == "/tmp/Foo.idr"
```
Visibility: export
Fixity Declaration: infixr operator, level 7dropExtension : String -> String
Drops the extension of the path.
Visibility: export