Filesystem.Path

system-filepath-0.4.13.4: High-level, byte-based file and directory path manipulations (deprecated)

Copyright | 2010 John Millikin
License | MIT
Maintainer | jmillikin@gmail.com
Portability | portable
Safe Haskell | Safe
Language | Haskell98

Filesystem.Path

Contents

- Basic properties
- Basic operations
- Extensions

Description

High‐level, byte‐based file and directory path manipulations. You probably want to import Filesystem.Path.CurrentOS instead, since it handles detecting which rules to use in the current compilation.

Synopsis

- data FilePath
- empty :: FilePath
- null :: FilePath -> Bool
- root :: FilePath -> FilePath
- directory :: FilePath -> FilePath
- parent :: FilePath -> FilePath
- filename :: FilePath -> FilePath
- dirname :: FilePath -> FilePath
- basename :: FilePath -> FilePath
- absolute :: FilePath -> Bool
- relative :: FilePath -> Bool
- append :: FilePath -> FilePath -> FilePath
- (</>) :: FilePath -> FilePath -> FilePath
- concat :: [FilePath] -> FilePath
- commonPrefix :: [FilePath] -> FilePath
- stripPrefix :: FilePath -> FilePath -> Maybe FilePath
- collapse :: FilePath -> FilePath
- splitDirectories :: FilePath -> [FilePath]
- extension :: FilePath -> Maybe Text
- extensions :: FilePath -> [Text]
- hasExtension :: FilePath -> Text -> Bool
- addExtension :: FilePath -> Text -> FilePath
- (<.>) :: FilePath -> Text -> FilePath
- dropExtension :: FilePath -> FilePath
- replaceExtension :: FilePath -> Text -> FilePath
- addExtensions :: FilePath -> [Text] -> FilePath
- dropExtensions :: FilePath -> FilePath
- replaceExtensions :: FilePath -> [Text] -> FilePath
- splitExtension :: FilePath -> (FilePath, Maybe Text)
- splitExtensions :: FilePath -> (FilePath, [Text])

# Documentation

data FilePath

Instances

Eq FilePath |
Data FilePath |
Ord FilePath |
NFData FilePath |

empty :: FilePath

A file path with no root, directory, or filename

# Basic properties

null :: FilePath -> Bool

    null p = (p == empty)

root :: FilePath -> FilePath

Retrieves the `FilePath`’s root.

directory :: FilePath -> FilePath

Retrieves the `FilePath`’s directory. If the path is already a directory, it is returned unchanged.

parent :: FilePath -> FilePath

Retrieves the `FilePath`’s parent directory.

filename :: FilePath -> FilePath

Retrieve a `FilePath`’s filename component.

    filename "foo/bar.txt" == "bar.txt"

dirname :: FilePath -> FilePath

Retrieve a `FilePath`’s directory name. This is only the file name of the directory, not its full path.

    dirname "foo/bar/baz.txt" == "bar"
    dirname "/" == ""

Since: 0.4.1

basename :: FilePath -> FilePath

Retrieve a `FilePath`’s basename component.

    basename "foo/bar.txt" == "bar"

absolute :: FilePath -> Bool

Test whether a path is absolute.

relative :: FilePath -> Bool

Test whether a path is relative.

# Basic operations

append :: FilePath -> FilePath -> FilePath

Appends two `FilePath`s. If the second path is absolute, it is returned unchanged.

(</>) :: FilePath -> FilePath -> FilePath

An alias for `append`.

concat :: [FilePath] -> FilePath

A fold over `append`.

commonPrefix :: [FilePath] -> FilePath

Find the greatest common prefix between a list of `FilePath`s.

stripPrefix :: FilePath -> FilePath -> Maybe FilePath

Remove a prefix from a path.

    stripPrefix "/foo/" "/foo/bar/baz.txt" == Just "bar/baz.txt"
    stripPrefix "/foo/" "/bar/baz.txt" == Nothing

This function operates on logical prefixes, rather than by counting characters. The prefix `"/foo/bar/baz"` is interpreted the path `("/foo/bar/", "baz")`, and will be stripped accordingly:

    stripPrefix "/foo/bar/baz" "/foo/bar/baz/qux" == Nothing
    stripPrefix "/foo/bar/baz" "/foo/bar/baz.txt" == Just ".txt"

Since: 0.4.1

collapse :: FilePath -> FilePath

Remove intermediate `"."` and `".."` directories from a path.

    collapse "/foo/./bar" == "/foo/bar"
    collapse "/foo/bar/../baz" == "/foo/baz"
    collapse "/foo/../../bar" == "/bar"
    collapse "./foo/bar" == "./foo/baz"

Note that if any of the elements are symbolic links, `collapse` may change which file the path resolves to.

Since: 0.2

splitDirectories :: FilePath -> [FilePath]

expand a FilePath into a list of the root name, directories, and file name

Since: 0.4.7

# Extensions

extension :: FilePath -> Maybe Text

Get a `FilePath`’s last extension, or `Nothing` if it has no extensions.

extensions :: FilePath -> [Text]

Get a `FilePath`’s full extension list.

hasExtension :: FilePath -> Text -> Bool

Get whether a `FilePath`’s last extension is the predicate.

addExtension :: FilePath -> Text -> FilePath

Append an extension to the end of a `FilePath`.

(<.>) :: FilePath -> Text -> FilePath

An alias for `addExtension`.

dropExtension :: FilePath -> FilePath

Remove a `FilePath`’s last extension.

replaceExtension :: FilePath -> Text -> FilePath

Replace a `FilePath`’s last extension.

addExtensions :: FilePath -> [Text] -> FilePath

Append many extensions to the end of a `FilePath`.

dropExtensions :: FilePath -> FilePath

Remove all extensions from a `FilePath`.

replaceExtensions :: FilePath -> [Text] -> FilePath

Remove all extensions from a `FilePath`, and replace them with a new list.

splitExtension :: FilePath -> (FilePath, Maybe Text)

    splitExtension p = (dropExtension p, extension p)

splitExtensions :: FilePath -> (FilePath, [Text])

    splitExtensions p = (dropExtensions p, extensions p)