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
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
give you that (same with Posix). Written in Haskell 98 with
If you go to the Haddock page, there are a few little examples at the top of the re-exported module.
Thanks to Marc Webber, shapr, David House, Lemmih, others…
System.FilePath from Cabal, by Lemmih
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
Hopefully this new module can be used without noticing any lost functions, and certainly adds new features/functions to the table.
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. The only way to introduce an abstract type is to
provide wrappers for these functions or casts between
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
18.104.22.168 Mar 2014
Bundled with GHC 7.8.1
Update to Cabal 1.10 format
Minor Haddock cleanups
22.214.171.124 Sep 2012
Bundled with GHC 7.6.1
126.96.36.199 Feb 2012
Bundled with GHC 7.4.1
Add support for SafeHaskell
normalise "/"to result in