The filepath package

[Tags:bsd3, library]

This package provides functionality for manipulating FilePath values, and is shipped with both GHC and the Haskell Platform. It provides three modules:

All three modules provide the same API, and the same documentation (calling out differences in the different variants).


[Skip to Readme]

Properties

Versions 1.0, 1.1.0.0, 1.1.0.1, 1.1.0.2, 1.1.0.3, 1.1.0.4, 1.2.0.0, 1.2.0.1, 1.3.0.0, 1.3.0.1, 1.3.0.2, 1.4.0.0, 1.4.1.0
Change log changelog.md
Dependencies base (>=4 && <4.10) [details]
License BSD3
Copyright Neil Mitchell 2005-2015
Author Neil Mitchell <ndmitchell@gmail.com>
Maintainer Neil Mitchell <ndmitchell@gmail.com>
Stability Unknown
Category System
Home page https://github.com/haskell/filepath#readme
Bug tracker https://github.com/haskell/filepath/issues
Source repository head: git clone https://github.com/haskell/filepath.git
Uploaded Mon Dec 28 19:08:12 UTC 2015 by NeilMitchell
Distributions Arch:1.4.1.0, Fedora:1.4.0.0, LTSHaskell:1.4.0.0, NixOS:1.4.1.0, Stackage:1.4.1.0
Downloads 17415 total (37 in the last 30 days)
Votes
1 []
Status Docs uploaded by user
Build status unknown [no reports yet]

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Readme for filepath

Readme for filepath-1.4.1.0

FilePath Hackage version Linux Build Status Windows Build Status

The filepath package provides functionality for manipulating FilePath values, and is shipped with both GHC and the Haskell Platform. It provides three modules:

  • System.FilePath.Posix manipulates POSIX/Linux style FilePath values (with / as the path separator).
  • System.FilePath.Windows manipulates Windows style FilePath values (with either \ or / as the path separator, and deals with drives).
  • System.FilePath is an alias for the module appropriate to your platform.

All three modules provide the same API, and the same documentation (calling out differences in the different variants).

Should FilePath be an abstract data type?

The answer for this library is "no". While an abstract FilePath has some advantages (mostly type safety), it also has some disadvantages:

  • In Haskell the definition is type FilePath = String, and all file-orientated functions operate on this type alias, e.g. readFile/writeFile. Any abstract type would require wrappers for these functions or lots of casts between String and the abstraction.
  • It is not immediately obvious what a FilePath is, and what is just a pure String. For example, /path/file.ext is a FilePath. Is /? /path? path? file.ext? .ext? file?
  • Often it is useful to represent invalid files, e.g. /foo/*.txt probably isn't an actual file, but a glob pattern. Other programs use foo//bar for globs, which is definitely not a file, but might want to be stored as a FilePath.
  • Some programs use syntactic non-semantic details of the FilePath to change their behaviour. For example, foo, foo/ and foo/. are all similar, and refer to the same location on disk, but may behave differently when passed to command-line tools.
  • A useful step to introducing an abstract FilePath is to reduce the amount of manipulating FilePath values like lists. This library hopes to help in that effort.