MissingH-1.0.0: Large utility librarySource codeContentsIndex
System.IO.HVFS
Portabilityportable
Stabilityprovisional
MaintainerJohn Goerzen <jgoerzen@complete.org>
Contents
Implementation Classes / Types
Re-exported types from other modules
Description

Haskell Virtual FS -- generic support for real or virtual filesystem in Haskell

Copyright (c) 2004-2005 John Goerzen, jgoerzen@complete.org

The idea of this module is to provide virtualization of filesystem calls. In addition to the "real" system filesystem, you can also provide access to other, virtual, filesystems using the same set of calls. Examples of such virtual filesystems might include a remote FTP server, WebDAV server, a local Hashtable, a ConfigParser object, or any other data structure you can represent as a tree of named nodes containing strings.

Each HVFS function takes a HVFS "handle" (HVFS instance) as its first parameter. If you wish to operate on the standard system filesystem, you can just use SystemFS.

The MissingH.HVFS.IO.InstanceHelpers module contains some code to help you make your own HVFS instances.

The HVFSOpenable class works together with the System.IO.HVIO module to provide a complete virtual filesystem and I/O model that allows you to open up virtual filesystem files and act upon them in a manner similar to standard Handles.

Synopsis
class Show a => HVFS a where
vGetCurrentDirectory :: a -> IO FilePath
vSetCurrentDirectory :: a -> FilePath -> IO ()
vGetDirectoryContents :: a -> FilePath -> IO [FilePath]
vDoesFileExist :: a -> FilePath -> IO Bool
vDoesDirectoryExist :: a -> FilePath -> IO Bool
vDoesExist :: a -> FilePath -> IO Bool
vCreateDirectory :: a -> FilePath -> IO ()
vRemoveDirectory :: a -> FilePath -> IO ()
vRenameDirectory :: a -> FilePath -> FilePath -> IO ()
vRemoveFile :: a -> FilePath -> IO ()
vRenameFile :: a -> FilePath -> FilePath -> IO ()
vGetFileStatus :: a -> FilePath -> IO HVFSStatEncap
vGetSymbolicLinkStatus :: a -> FilePath -> IO HVFSStatEncap
vGetModificationTime :: a -> FilePath -> IO ClockTime
vRaiseError :: a -> IOErrorType -> String -> Maybe FilePath -> IO c
vCreateSymbolicLink :: a -> FilePath -> FilePath -> IO ()
vReadSymbolicLink :: a -> FilePath -> IO FilePath
vCreateLink :: a -> FilePath -> FilePath -> IO ()
class Show a => HVFSStat a where
vDeviceID :: a -> DeviceID
vFileID :: a -> FileID
vFileMode :: a -> FileMode
vLinkCount :: a -> LinkCount
vFileOwner :: a -> UserID
vFileGroup :: a -> GroupID
vSpecialDeviceID :: a -> DeviceID
vFileSize :: a -> FileOffset
vAccessTime :: a -> EpochTime
vModificationTime :: a -> EpochTime
vStatusChangeTime :: a -> EpochTime
vIsBlockDevice :: a -> Bool
vIsCharacterDevice :: a -> Bool
vIsNamedPipe :: a -> Bool
vIsRegularFile :: a -> Bool
vIsDirectory :: a -> Bool
vIsSymbolicLink :: a -> Bool
vIsSocket :: a -> Bool
class HVFS a => HVFSOpenable a where
vOpen :: a -> FilePath -> IOMode -> IO HVFSOpenEncap
vReadFile :: a -> FilePath -> IO String
vWriteFile :: a -> FilePath -> String -> IO ()
vOpenBinaryFile :: a -> FilePath -> IOMode -> IO HVFSOpenEncap
data HVFSOpenEncap = forall a . HVIO a => HVFSOpenEncap a
data HVFSStatEncap = forall a . HVFSStat a => HVFSStatEncap a
withStat :: forall b. HVFSStatEncap -> (forall a. HVFSStat a => a -> b) -> b
withOpen :: forall b. HVFSOpenEncap -> (forall a. HVIO a => a -> b) -> b
data SystemFS = SystemFS
type FilePath = String
type DeviceID = CDev
type FileID = CIno
type FileMode = CMode
type LinkCount = CNlink
type UserID = CUid
type GroupID = CGid
type FileOffset = COff
type EpochTime = CTime
data IOMode
Implementation Classes / Types
class Show a => HVFS a whereSource

The main HVFS class.

Default implementations of these functions are provided:

Default implementations of all other functions will generate an isIllegalOperation error, since they are assumed to be un-implemented.

You should always provide at least a vGetFileStatus call, and almost certainly several of the others.

Most of these functions correspond to functions in System.Directory or System.Posix.Files. Please see detailed documentation on them there.

Methods
vGetCurrentDirectory :: a -> IO FilePathSource
vSetCurrentDirectory :: a -> FilePath -> IO ()Source
vGetDirectoryContents :: a -> FilePath -> IO [FilePath]Source
vDoesFileExist :: a -> FilePath -> IO BoolSource
vDoesDirectoryExist :: a -> FilePath -> IO BoolSource
vDoesExist :: a -> FilePath -> IO BoolSource
True if the file exists, regardless of what type it is. This is even True if the given path is a broken symlink.
vCreateDirectory :: a -> FilePath -> IO ()Source
vRemoveDirectory :: a -> FilePath -> IO ()Source
vRenameDirectory :: a -> FilePath -> FilePath -> IO ()Source
vRemoveFile :: a -> FilePath -> IO ()Source
vRenameFile :: a -> FilePath -> FilePath -> IO ()Source
vGetFileStatus :: a -> FilePath -> IO HVFSStatEncapSource
vGetSymbolicLinkStatus :: a -> FilePath -> IO HVFSStatEncapSource
vGetModificationTime :: a -> FilePath -> IO ClockTimeSource
vRaiseError :: a -> IOErrorType -> String -> Maybe FilePath -> IO cSource
Raise an error relating to actions on this class.
vCreateSymbolicLink :: a -> FilePath -> FilePath -> IO ()Source
vReadSymbolicLink :: a -> FilePath -> IO FilePathSource
vCreateLink :: a -> FilePath -> FilePath -> IO ()Source
show/hide Instances
class Show a => HVFSStat a whereSource

Evaluating types of files and information about them.

This corresponds to the System.Posix.Types.FileStatus type, and indeed, that is one instance of this class.

Inplementators must, at minimum, implement vIsDirectory and vIsRegularFile.

Default implementations of everything else are provided, returning reasonable values.

A default implementation of this is not currently present on Windows.

Methods
vDeviceID :: a -> DeviceIDSource
vFileID :: a -> FileIDSource
vFileMode :: a -> FileModeSource
Refers to file permissions, NOT the st_mode field from stat(2)
vLinkCount :: a -> LinkCountSource
vFileOwner :: a -> UserIDSource
vFileGroup :: a -> GroupIDSource
vSpecialDeviceID :: a -> DeviceIDSource
vFileSize :: a -> FileOffsetSource
vAccessTime :: a -> EpochTimeSource
vModificationTime :: a -> EpochTimeSource
vStatusChangeTime :: a -> EpochTimeSource
vIsBlockDevice :: a -> BoolSource
vIsCharacterDevice :: a -> BoolSource
vIsNamedPipe :: a -> BoolSource
vIsRegularFile :: a -> BoolSource
vIsDirectory :: a -> BoolSource
vIsSymbolicLink :: a -> BoolSource
vIsSocket :: a -> BoolSource
show/hide Instances
class HVFS a => HVFSOpenable a whereSource
Types that can open a HVIO object should be instances of this class. You need only implement vOpen.
Methods
vOpen :: a -> FilePath -> IOMode -> IO HVFSOpenEncapSource
vReadFile :: a -> FilePath -> IO StringSource
vWriteFile :: a -> FilePath -> String -> IO ()Source
vOpenBinaryFile :: a -> FilePath -> IOMode -> IO HVFSOpenEncapSource
show/hide Instances
data HVFSOpenEncap Source
Similar to HVFSStatEncap, but for vOpen result.
Constructors
forall a . HVIO a => HVFSOpenEncap a
data HVFSStatEncap Source

Encapsulate a HVFSStat result. This is required due to Haskell typing restrictions. You can get at it with:

 case encap of
    HVFSStatEncap x -> -- now use x
Constructors
forall a . HVFSStat a => HVFSStatEncap a
withStat :: forall b. HVFSStatEncap -> (forall a. HVFSStat a => a -> b) -> bSource

Convenience function for working with stat -- takes a stat result and a function that uses it, and returns the result.

Here is an example from the HVFS source:

    vGetModificationTime fs fp = 
       do s <- vGetFileStatus fs fp
          return $ epochToClockTime (withStat s vModificationTime)

See epochToClockTime for more information.

withOpen :: forall b. HVFSOpenEncap -> (forall a. HVIO a => a -> b) -> bSource
Similar to withStat, but for the vOpen result.
data SystemFS Source
Constructors
SystemFS
show/hide Instances
Re-exported types from other modules
type FilePath = StringSource
File and directory names are values of type String, whose precise meaning is operating system dependent. Files can be opened, yielding a handle which can then be used to operate on the contents of that file.
type DeviceID = CDevSource
type FileID = CInoSource
type FileMode = CModeSource
type LinkCount = CNlinkSource
type UserID = CUidSource
type GroupID = CGidSource
type FileOffset = COffSource
type EpochTime = CTimeSource
data IOMode Source
show/hide Instances
Produced by Haddock version 2.6.0