Path

The Path module provides functions for manipulating file paths in a platform-independent way.

Joining Paths

Path.join
List String -> String
Joins path components with the appropriate separator.
path = Path.join ["home", "user", "docs", "file.txt"]
println path
# => "home/user/docs/file.txt"

Path Components

Path.dirname
String -> String
Returns the directory portion of a path.
println (Path.dirname "/home/user/file.txt")
# => "/home/user"
Path.basename
String -> String
Returns the file name portion of a path.
println (Path.basename "/home/user/file.txt")
# => "file.txt"
Path.extension
String -> String
Returns the file extension (without the dot).
println (Path.extension "document.pdf")
# => "pdf"
Path.stem
String -> String
Returns the file name without the extension.
println (Path.stem "document.pdf")
# => "document"

Path Resolution

Path.expand
String -> String
Expands ~ to the user's home directory.
println (Path.expand "~/documents")
# => "/home/user/documents"
Path.resolve
String -> String
Returns the absolute canonical path, resolving symlinks.
println (Path.resolve "./src/../lib")
# => "/home/user/project/lib"
Path.normalize
String -> String
Normalizes a path by resolving . and .. components.
println (Path.normalize "/home/user/../user/./docs")
# => "/home/user/docs"
Path.relative
String -> String -> String
Returns a relative path from the first path to the second.
println (Path.relative "/home/user" "/home/user/docs/file.txt")
# => "docs/file.txt"

Predicates

Path.is-absolute?
String -> Bool
Returns true if the path is absolute.
println (Path.is-absolute? "/home/user")
# => true

println (Path.is-absolute? "./relative")
# => false