MissingH-1.2.0.0: Large utility library

Portability | portable
Stability | provisional
Maintainer | John Goerzen <jgoerzen@complete.org>
Safe Haskell | None

System.IO.HVFS.InstanceHelpers

Contents

- HVFSStat objects
- HVFS objects & types
  - MemoryVFS
- Utilities

Description

Utilities for creating instances of the items defined in System.IO.HVFS.

Synopsis

- data SimpleStat = SimpleStat {
  - isFile :: Bool
  - fileSize :: FileOffset
  }
- data MemoryVFS
- newMemoryVFS :: [MemoryNode] -> IO MemoryVFS
- newMemoryVFSRef :: IORef [MemoryNode] -> IO MemoryVFS
- type MemoryNode = (String, MemoryEntry)
- data MemoryEntry
  - = MemoryDirectory [MemoryNode]
  - | MemoryFile String
- nice_slice :: String -> [String]
- getFullPath :: HVFS a => a -> String -> IO String
- getFullSlice :: HVFS a => a -> String -> IO [String]

# HVFSStat objects

data SimpleStat

A simple System.IO.HVFS.HVFSStat class that assumes that everything is either a file or a directory.

Constructors

SimpleStat |
Fields isFile :: Bool True if file, False if directory fileSize :: FileOffset Set to 0 if unknown or a directory

Instances

Eq SimpleStat |
Show SimpleStat |
HVFSStat SimpleStat |

# HVFS objects & types

## MemoryVFS

data MemoryVFS

An in-memory read/write filesystem. Think of it as a dynamically resizable ramdisk written in Haskell.

Instances

Show MemoryVFS |
HVFSOpenable MemoryVFS |
HVFS MemoryVFS |

newMemoryVFS :: [MemoryNode] -> IO MemoryVFS

Create a new `MemoryVFS` object from an existing tree. An empty filesystem may be created by using `[]` for the parameter.

newMemoryVFSRef :: IORef [MemoryNode] -> IO MemoryVFS

Create a new `MemoryVFS` object using an IORef to an existing tree.

type MemoryNode = (String, MemoryEntry)

The basic node of a `MemoryVFS`. The String corresponds to the filename, and the entry to the contents.

data MemoryEntry

The content of a file or directory in a `MemoryVFS`.

Constructors

MemoryDirectory [MemoryNode] |
MemoryFile String |

Instances

Eq MemoryEntry |
Show MemoryEntry |

# Utilities

nice_slice :: String -> [String]

Similar to `NameManip` but the first element won't be `/`.

    nice_slice "/" -> []
    nice_slice "/foo/bar" -> ["foo", "bar"]

getFullPath :: HVFS a => a -> String -> IO String

Gets a full path, after investigating the cwd.

getFullSlice :: HVFS a => a -> String -> IO [String]

Gets the full path via `getFullPath`, then splits it via `nice_slice`.