The filepath
package provides functionality for manipulating FilePath
values, and is shipped with GHC.
It provides three modules:
-
System.FilePath.Posix
manipulates POSIX/Linux styleFilePath
values (with/
as the path separator). -
System.FilePath.Windows
manipulates Windows styleFilePath
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).
FilePath
?
What is a In Haskell, the definition is type FilePath = String
as of now. A Haskell String
is a list of Unicode code points.
On unix, filenames don't have a predefined encoding as per the
POSIX specification
and are passed as char[]
to syscalls.
On windows (at least the API used by Win32
) filepaths are UTF-16 strings.
This means that Haskell filepaths have to be converted to C-strings on unix (utilizing the current filesystem encoding) and to UTF-16 strings on windows.
Further, this is a low-level library and it makes no attempt at providing a more type safe variant for filepaths (e.g. by distinguishing between absolute and relative paths) and ensures no invariants (such as filepath validity).
For such libraries, check out the following: