 | directory-tree-0.2.0: A simple directory-like tree datatype, with useful IO functions | Contents | Index |
|
System.Directory.Tree | Portability | portable | Stability | experimental | Maintainer | Brandon Simmons <brandon.m.simmons@gmail.com> |
|
|
|
|
|
Description |
Provides a simple data structure mirroring a directory tree on the
filesystem, as well as useful functions for reading and writing
file and directory structures in the IO monad.
Errors are caught in a special constructor in the DirTree type.
Defined instances of Functor, Traversable and Foldable allow for
easily operating on a directory of files. For example, you could use
Foldable.foldr to create a hash of the entire contents of a directory.
The AnchoredDirTree type is a simple wrapper for DirTree to keep track
of a base directory context for the DirTree.
Please send me any requests, bugs, or other feedback on this module!
|
|
Synopsis |
|
|
|
|
Data types for representing directory trees
|
|
data DirTree a |
the String in the name field is always a file name, never a full path.
The free type variable is used in the File constructor and can hold Handles,
Strings representing a file's contents or anything else you can think of.
We catch any IO errors in the Failed constructor. an Exception can be
converted to a String with show.
| Constructors | | Instances | |
|
|
data AnchoredDirTree a |
a simple wrapper to hold a base directory name, which can be either
an absolute or relative path. This lets us give the DirTree a context,
while still letting us store only directory and file NAMES (not full paths)
in the DirTree. (uses an infix constructor; don't be scared)
| Constructors | | Instances | |
|
|
type FileName = String |
an element in a FilePath:
|
|
High level IO functions
|
|
readDirectory :: FilePath -> IO (AnchoredDirTree String) |
build an AnchoredDirTree, given the path to a directory, opening the files
using readFile.
|
|
readDirectoryWith :: (FilePath -> IO a) -> FilePath -> IO (AnchoredDirTree a) |
same as readDirectory but allows us to, for example, use
ByteString.readFile to return a tree of ByteStrings.
|
|
writeDirectory :: AnchoredDirTree String -> IO () |
write a DirTree of strings to disk. clobbers files of the same name.
doesn't affect files in the directories (if any already exist) with
different names:
|
|
writeDirectoryWith :: (FilePath -> a -> IO ()) -> AnchoredDirTree a -> IO () |
writes the directory structure to disc, then uses the provided function to
write the contents of Files to disc.
|
|
Lower level functions
|
|
zipPaths :: AnchoredDirTree a -> DirTree (FilePath, a) |
tuple up the complete filename with the File contents, by building up the
path, trie-style, from the root. The filepath will be relative to the current
directory.
This allows us to, for example, mapM_ 'uncurry writeFile' over a DirTree of
strings.
|
|
build :: FilePath -> IO (AnchoredDirTree FilePath) |
builds a DirTree from the contents of the directory passed to it, saving
the base directory in the Anchored* wrapper. Errors are caught in the tree in
the Failed constructor. The file fields initially are populated with full
paths to the files they are abstracting.
|
|
openDirectory :: FilePath -> IOMode -> IO (AnchoredDirTree Handle) |
a simple application of readDirectoryWith openFile:
|
|
writeJustDirs :: AnchoredDirTree a -> IO () |
writes the directory structure (not files) of a DirTree to the anchored
directory. can be preparation for writing files:
|
|
Utility functions
|
|
Handling failure
|
|
successful :: DirTree a -> Bool |
True if there are no Failed constructors in the tree
|
|
anyFailed :: DirTree a -> Bool |
True if any Failed constructors in the tree
|
|
failures :: DirTree a -> [DirTree a] |
returns a list of Failed constructors only:
|
|
failedMap :: (FileName -> IOException -> DirTree a) -> DirTree a -> DirTree a |
maps a function to convert Failed DirTrees to Files or Dirs
|
|
Misc.
|
|
free :: AnchoredDirTree a -> DirTree a |
strips away base directory wrapper:
|
|
Produced by Haddock version 2.7.2 |