The filepath package

[Tags: bsd3, library]

A library for FilePath manipulations, using Posix or Windows filepaths depending on the platform.

Both System.FilePath.Posix and System.FilePath.Windows provide the same interface. See either for examples and a list of the available functions.


[Skip to ReadMe]

Properties

Versions1.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
Change logchangelog.md
Dependenciesbase (>=4 && <4.8) [details]
LicenseBSD3
AuthorNeil Mitchell
Maintainerlibraries@haskell.org
CategorySystem
Home pagehttp://www-users.cs.york.ac.uk/~ndm/filepath/
Bug trackerhttps://github.com/haskell/filepath/issues
Source repositoryhead: git clone https://github.com/haskell/filepath.git
this: git clone http://git.haskell.org/packages/filepath.git(tag filepath-1.3.0.2-release)
UploadedFri Mar 21 21:18:09 UTC 2014 by HerbertValerioRiedel
UpdatedMon Jan 12 09:18:07 UTC 2015 by HerbertValerioRiedel to revision 2
DistributionsFedora:1.3.0.2, LTSHaskell:1.4.0.0, NixOS:1.4.0.0, Stackage:1.4.0.0
Downloads15989 total (640 in last 30 days)
Votes
1 []
StatusDocs available [build log]
Successful builds reported [all 1 reports]

Modules

[Index]

Downloads

Maintainers' corner

For package maintainers and hackage trustees

Readme for filepath-1.3.0.2

System.FilePath Build Status

I have written a System.FilePath module in part based on the one in Yhc, and in part based on the one in Cabal (thanks to Lemmih). The aim is to try and get this module into the base package, as FilePaths are something many programs use, but its all too easy to hack up a little function that gets it right most of the time on most platforms, and there lies a source of bugs.

This module is Posix (Linux) and Windows capable - just import System.FilePath and it will pick the right one. Of course, if you demand Windows paths on all OSes, then System.FilePath.Windows will give you that (same with Posix). Written in Haskell 98 with Hierarchical Modules.

If you go to the Haddock page, there are a few little examples at the top of the re-exported module.

Acknowledgments

Thanks to Marc Webber, shapr, David House, Lemmih, others...

Competitors

System.FilePath from Cabal, by Lemmih FilePath.hs and NameManip.hs from MissingH

The one from Cabal and FilePath.hs in MissingH are both very similar, I stole lots of good ideas from those two.

NameManip.hs seems to be more unix specific, but all functions in that module have equivalents in this new System.FilePath module.

Hopefully this new module can be used without noticing any lost functions, and certainly adds new features/functions to the table.

Should FilePath be an abstract data type?

The answer for this library is no. This is a deliberate design decision.

In Haskell 98 the definition is type FilePath = String, and all functions operating on FilePaths, i.e. readFile/writeFile etc take FilePaths. The only way to introduce an abstract type is to provide wrappers for these functions or casts between Strings and FilePathAbstracts.

There are also additional questions as to what constitutes a FilePath, and what is just a pure String. For example, "/path/file.ext" is a FilePath. Is "/" ? "/path" ? "path" ? "file.ext" ? ".ext" ? "file" ?

With that being accepted, it should be trivial to write System.FilePath.ByteString which has the same interface as System.FilePath yet operates on ByteStrings.