fs-api
July 17, 2024 ยท View on GitHub
The fs-api package provides an abstract interface to filesystems. The abstract
interface is a datatype called HasFS, which is parameterised over a monad m
that filesystem operations run in, and the type of file handles h.
removeFile is an example of a filesystem operation in this interface.
data HasFS m h = HasFS {
{- omitted -}
-- | Remove the file (which must exist)
, removeFile :: HasCallStack => FsPath -> m ()
{- omitted -}
}
Code that is written using this interface can be run against any implementation
of a file system. The System.FS.IO module provides a function for initialising
a HasFS interface for the real filesystem.
ioHasFS :: (MonadIO m, PrimState IO ~ PrimState m) => MountPoint -> HasFS m HandleIO
Note that ioHasFS requires some context in the form of a MountPoint: the
base directory in which the filesystem operations should be run.