filepath-bytestring package provides functionality for manipulating
RawFilePath values (
Its interface is equivilant to the
It provides three modules:
System.FilePath.Posix.ByteStringmanipulates POSIX/Linux style
/as the path separator).
System.FilePath.Windows.ByteStringmanipulates Windows style
RawFilePathvalues (with either
/as the path separator, and deals with drives).
System.FilePath.ByteStringis 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).
This package’s version should be the same as the
filepath it’s derived
from, with an added revision number.
Most of the code is in
System/FilePath/Internal.hs which is
#include‘d into both
System/FilePath/Windows.hs with the
IS_WINDOWS CPP define set to either
False. This Internal module is a bit weird in that it isn’t really a Haskell module, but is more an include file.
The library has extensive doc tests. Anything starting with
-- > is transformed into a doc test as a predicate that must evaluate to
True. These tests follow a few rules:
- Tests prefixed with
Posix:are only tested against that specific implementation - otherwise tests are run against both implementations.
- Any single letter variable, e.g.
x, is considered universal quantification, and is checked with
Valid x =>appears at the start of a doc test, that means the property will only be tested with
Also, all exported functions are quickchecked against the ones from
filepath to make sure thay generate equivilant results.
The tests can be generated by
Generate.hs in the root of the repo, and will be placed in
TestGen.hs file is checked into the repo, and the CI scripts check that
TestGen.hs is in sync with what would be generated a fresh - if you don’t regenerate
TestGen.hs the CI will fail.
.ghci file is set up to allow you to type
ghci to open the library, then
:go will regenerate the tests and run them.