dirtree-0.0.1: A small library for working with directories.

Copyright(c) Christian Gram Kalhauge 2019
LicenseMIT
Maintainerkalhauge@cs.ucla.edu
Safe HaskellNone
LanguageHaskell2010

System.DirTree

Contents

Description

A directory tree, with helper functions to do different cool stuff.

Synopsis

DirTree

newtype DirTree s a Source #

A dir tree is a tree of nodes.

Constructors

DirTree 

Fields

Instances
FunctorWithIndex FileKey (DirTree v) Source # 
Instance details

Defined in System.DirTree

Methods

imap :: (FileKey -> a -> b) -> DirTree v a -> DirTree v b #

imapped :: IndexedSetter FileKey (DirTree v a) (DirTree v b) a b #

FoldableWithIndex FileKey (DirTree v) Source # 
Instance details

Defined in System.DirTree

Methods

ifoldMap :: Monoid m => (FileKey -> a -> m) -> DirTree v a -> m #

ifolded :: IndexedFold FileKey (DirTree v a) a #

ifoldr :: (FileKey -> a -> b -> b) -> b -> DirTree v a -> b #

ifoldl :: (FileKey -> b -> a -> b) -> b -> DirTree v a -> b #

ifoldr' :: (FileKey -> a -> b -> b) -> b -> DirTree v a -> b #

ifoldl' :: (FileKey -> b -> a -> b) -> b -> DirTree v a -> b #

TraversableWithIndex FileKey (DirTree v) Source # 
Instance details

Defined in System.DirTree

Methods

itraverse :: Applicative f => (FileKey -> a -> f b) -> DirTree v a -> f (DirTree v b) #

itraversed :: IndexedTraversal FileKey (DirTree v a) (DirTree v b) a b #

Functor (DirTree s) Source # 
Instance details

Defined in System.DirTree

Methods

fmap :: (a -> b) -> DirTree s a -> DirTree s b #

(<$) :: a -> DirTree s b -> DirTree s a #

(Show a, Show b) => Show (FileMap (DirTree a b)) Source # 
Instance details

Defined in System.DirTree

Methods

showsPrec :: Int -> FileMap (DirTree a b) -> ShowS #

show :: FileMap (DirTree a b) -> String #

showList :: [FileMap (DirTree a b)] -> ShowS #

Foldable (DirTree s) Source # 
Instance details

Defined in System.DirTree

Methods

fold :: Monoid m => DirTree s m -> m #

foldMap :: Monoid m => (a -> m) -> DirTree s a -> m #

foldr :: (a -> b -> b) -> b -> DirTree s a -> b #

foldr' :: (a -> b -> b) -> b -> DirTree s a -> b #

foldl :: (b -> a -> b) -> b -> DirTree s a -> b #

foldl' :: (b -> a -> b) -> b -> DirTree s a -> b #

foldr1 :: (a -> a -> a) -> DirTree s a -> a #

foldl1 :: (a -> a -> a) -> DirTree s a -> a #

toList :: DirTree s a -> [a] #

null :: DirTree s a -> Bool #

length :: DirTree s a -> Int #

elem :: Eq a => a -> DirTree s a -> Bool #

maximum :: Ord a => DirTree s a -> a #

minimum :: Ord a => DirTree s a -> a #

sum :: Num a => DirTree s a -> a #

product :: Num a => DirTree s a -> a #

Traversable (DirTree s) Source # 
Instance details

Defined in System.DirTree

Methods

traverse :: Applicative f => (a -> f b) -> DirTree s a -> f (DirTree s b) #

sequenceA :: Applicative f => DirTree s (f a) -> f (DirTree s a) #

mapM :: Monad m => (a -> m b) -> DirTree s a -> m (DirTree s b) #

sequence :: Monad m => DirTree s (m a) -> m (DirTree s a) #

(Eq s, Eq a) => Eq (DirTree s a) Source # 
Instance details

Defined in System.DirTree

Methods

(==) :: DirTree s a -> DirTree s a -> Bool #

(/=) :: DirTree s a -> DirTree s a -> Bool #

(Ord s, Ord a) => Ord (DirTree s a) Source # 
Instance details

Defined in System.DirTree

Methods

compare :: DirTree s a -> DirTree s a -> Ordering #

(<) :: DirTree s a -> DirTree s a -> Bool #

(<=) :: DirTree s a -> DirTree s a -> Bool #

(>) :: DirTree s a -> DirTree s a -> Bool #

(>=) :: DirTree s a -> DirTree s a -> Bool #

max :: DirTree s a -> DirTree s a -> DirTree s a #

min :: DirTree s a -> DirTree s a -> DirTree s a #

(Show v, Show c) => Show (DirTree v c) Source # 
Instance details

Defined in System.DirTree

Methods

showsPrec :: Int -> DirTree v c -> ShowS #

show :: DirTree v c -> String #

showList :: [DirTree v c] -> ShowS #

Generic (DirTree s a) Source # 
Instance details

Defined in System.DirTree

Associated Types

type Rep (DirTree s a) :: Type -> Type #

Methods

from :: DirTree s a -> Rep (DirTree s a) x #

to :: Rep (DirTree s a) x -> DirTree s a #

Semigroup (DirTree s a) Source # 
Instance details

Defined in System.DirTree

Methods

(<>) :: DirTree s a -> DirTree s a -> DirTree s a #

sconcat :: NonEmpty (DirTree s a) -> DirTree s a #

stimes :: Integral b => b -> DirTree s a -> DirTree s a #

(NFData s, NFData a) => NFData (DirTree s a) Source # 
Instance details

Defined in System.DirTree

Methods

rnf :: DirTree s a -> () #

type Rep (DirTree s a) Source # 
Instance details

Defined in System.DirTree

type Rep (DirTree s a) = D1 (MetaData "DirTree" "System.DirTree" "dirtree-0.0.1-LpN3AmmKCsNWVMG7Xg0uO" True) (C1 (MetaCons "DirTree" PrefixI True) (S1 (MetaSel (Just "dirTreeNode") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (DirTreeN s a))))

file :: a -> DirTree s a Source #

Constructs a dirtree with only a file

symlink :: s -> DirTree s a Source #

Constructs a dirtree with a symlink

directory :: FileMap (DirTree s a) -> DirTree s a Source #

Constructs a dirtree with a directory

directoryFromFiles :: [(String, DirTree s a)] -> DirTree s a Source #

Constructs a dirtree with a directory

Constructors

fromFiles :: [(FileKey, Either v a)] -> Maybe (DirTree v a) Source #

Create a dirtree from a non-empty list of files.

fromFiles' :: NonEmpty (FileKey, Either v a) -> DirTree v a Source #

Create a dirtree from a non-empty list of files.

toFiles :: DirTree v a -> [(FileKey, Either v a)] Source #

Accessors

type FileKey = [String] Source #

A filekey is the filepath in reverse order

lookupFile :: FileKey -> DirTree v a -> Maybe (DirTree v a) Source #

Lookup a file in a DirTree using a FileKey

Traversals

traverseDirTree :: Applicative f => (DirTreeNode (FileMap (f (DirTree s' a'))) s a -> f (DirTreeN s' a')) -> DirTree s a -> f (DirTree s' a') Source #

Traverse a DirTree

traverseDirTree' :: Applicative m => (s -> m s') -> (a -> m a') -> DirTree s a -> m (DirTree s' a') Source #

Traverse a DirTree

itraverseDirTree :: Applicative f => (FileKey -> DirTreeNode (FileMap (f (DirTree s' a'))) s a -> f (DirTreeN s' a')) -> DirTree s a -> f (DirTree s' a') Source #

Traverse over the tree

itraverseDirTree' :: Applicative f => (FileKey -> s -> f s') -> (FileKey -> a -> f a') -> DirTree s a -> f (DirTree s' a') Source #

Traverse over the tree with index. This method uses two functions one symlinks and one for files.

mapDirTree' :: (s -> s') -> (a -> a') -> DirTree s a -> DirTree s' a' Source #

maps over a dirtree

imapDirTree' :: (FileKey -> s -> s') -> (FileKey -> a -> a') -> DirTree s a -> DirTree s' a' Source #

Maps over a DirTree

depthfirst :: Monoid m => (FileKey -> DirTreeNode [String] v a -> m) -> DirTree v a -> m Source #

Recursively iterate over a folder.

foldDirTree :: (DirTreeNode (FileMap m) s a -> m) -> DirTree s a -> m Source #

Folds over a dirtree

foldDirTree' :: Monoid m => (s -> m) -> (a -> m) -> DirTree s a -> m Source #

Folds over a dirtree

ifoldDirTree :: (FileKey -> DirTreeNode (FileMap m) s a -> m) -> DirTree s a -> m Source #

Folds over a DirTree using the DirTreeNode.

ifoldDirTree' :: Monoid m => (FileKey -> s -> m) -> (FileKey -> a -> m) -> DirTree s a -> m Source #

Folds over a DirTree.

flatten :: (s -> DirTree s' a') -> (a -> DirTree s' a') -> DirTree s a -> DirTree s' a' Source #

Flatten a directory tree. This is usefull for following symlinks, or expanding zip-files.

Utils

findNode :: (FileKey -> DirTreeNode [String] v a -> Bool) -> DirTree v a -> Maybe (FileKey, DirTreeNode [String] v a) Source #

Find a file given a predicate that takes a FileKey and DirTreeNode.

listNodes :: DirTree v a -> [(FileKey, DirTreeNode [String] v a)] Source #

List all the nodes in the DirTree.

IO operations

readDirTree :: NFData a => (FilePath -> IO a) -> FilePath -> IO (DirTree Link a) Source #

Reads a DirTree. All file paths are absolute to the filepath

lazyReadDirTree :: (FilePath -> IO a) -> FilePath -> IO (DirTree Link a) Source #

Lazy read a DirTree. This function uses unsafeInterleaveIO to lazy interleave load a node. This means that it can be used to efficiently search of a file. All paths are absolute

writeDirTree :: (FilePath -> a -> IO ()) -> FilePath -> DirTree Link a -> IO () Source #

Reads a DirTree

followLinks :: NFData a => (FilePath -> IO a) -> DirTree Link a -> IO (DirTree Void a) Source #

Follow the links to create the tree. This function might recurse forever.

lazyFollowLinks :: (FilePath -> IO a) -> DirTree Link a -> IO (DirTree Void a) Source #

Like follow links but uses lazy io to only load the recursive folder when needed.

DirTreeNode

data Link Source #

A Link can either be Internal, pointing to something in the DirTree or External pointing to an absolute FilePath.

data DirTreeNode r s a Source #

A directory tree node. Everything is either a file, a symbolic link, or a directory.

Constructors

Directory r 
Symlink s 
File a 
Instances
Functor (DirTreeNode r s) Source # 
Instance details

Defined in System.DirTree

Methods

fmap :: (a -> b) -> DirTreeNode r s a -> DirTreeNode r s b #

(<$) :: a -> DirTreeNode r s b -> DirTreeNode r s a #

Foldable (DirTreeNode r s) Source # 
Instance details

Defined in System.DirTree

Methods

fold :: Monoid m => DirTreeNode r s m -> m #

foldMap :: Monoid m => (a -> m) -> DirTreeNode r s a -> m #

foldr :: (a -> b -> b) -> b -> DirTreeNode r s a -> b #

foldr' :: (a -> b -> b) -> b -> DirTreeNode r s a -> b #

foldl :: (b -> a -> b) -> b -> DirTreeNode r s a -> b #

foldl' :: (b -> a -> b) -> b -> DirTreeNode r s a -> b #

foldr1 :: (a -> a -> a) -> DirTreeNode r s a -> a #

foldl1 :: (a -> a -> a) -> DirTreeNode r s a -> a #

toList :: DirTreeNode r s a -> [a] #

null :: DirTreeNode r s a -> Bool #

length :: DirTreeNode r s a -> Int #

elem :: Eq a => a -> DirTreeNode r s a -> Bool #

maximum :: Ord a => DirTreeNode r s a -> a #

minimum :: Ord a => DirTreeNode r s a -> a #

sum :: Num a => DirTreeNode r s a -> a #

product :: Num a => DirTreeNode r s a -> a #

Traversable (DirTreeNode r s) Source # 
Instance details

Defined in System.DirTree

Methods

traverse :: Applicative f => (a -> f b) -> DirTreeNode r s a -> f (DirTreeNode r s b) #

sequenceA :: Applicative f => DirTreeNode r s (f a) -> f (DirTreeNode r s a) #

mapM :: Monad m => (a -> m b) -> DirTreeNode r s a -> m (DirTreeNode r s b) #

sequence :: Monad m => DirTreeNode r s (m a) -> m (DirTreeNode r s a) #

(Eq r, Eq s, Eq a) => Eq (DirTreeNode r s a) Source # 
Instance details

Defined in System.DirTree

Methods

(==) :: DirTreeNode r s a -> DirTreeNode r s a -> Bool #

(/=) :: DirTreeNode r s a -> DirTreeNode r s a -> Bool #

(Ord r, Ord s, Ord a) => Ord (DirTreeNode r s a) Source # 
Instance details

Defined in System.DirTree

Methods

compare :: DirTreeNode r s a -> DirTreeNode r s a -> Ordering #

(<) :: DirTreeNode r s a -> DirTreeNode r s a -> Bool #

(<=) :: DirTreeNode r s a -> DirTreeNode r s a -> Bool #

(>) :: DirTreeNode r s a -> DirTreeNode r s a -> Bool #

(>=) :: DirTreeNode r s a -> DirTreeNode r s a -> Bool #

max :: DirTreeNode r s a -> DirTreeNode r s a -> DirTreeNode r s a #

min :: DirTreeNode r s a -> DirTreeNode r s a -> DirTreeNode r s a #

(Show r, Show s, Show a) => Show (DirTreeNode r s a) Source # 
Instance details

Defined in System.DirTree

Methods

showsPrec :: Int -> DirTreeNode r s a -> ShowS #

show :: DirTreeNode r s a -> String #

showList :: [DirTreeNode r s a] -> ShowS #

Generic (DirTreeNode r s a) Source # 
Instance details

Defined in System.DirTree

Associated Types

type Rep (DirTreeNode r s a) :: Type -> Type #

Methods

from :: DirTreeNode r s a -> Rep (DirTreeNode r s a) x #

to :: Rep (DirTreeNode r s a) x -> DirTreeNode r s a #

(NFData r, NFData s, NFData a) => NFData (DirTreeNode r s a) Source # 
Instance details

Defined in System.DirTree

Methods

rnf :: DirTreeNode r s a -> () #

type Rep (DirTreeNode r s a) Source # 
Instance details

Defined in System.DirTree

type FileType = DirTreeNode () () () Source #

A FileType is just a DirTreeNode with no contents.

Folds

mapDirTreeNode :: (r -> r') -> (s -> s') -> (a -> a') -> DirTreeNode r s a -> DirTreeNode r' s' a' Source #

We can map over a DirTreeNode

foldDirTreeNode :: (r -> m) -> (s -> m) -> (a -> m) -> DirTreeNode r s a -> m Source #

We can fold over a DirTreeNode by providing a function for each case.

traverseDirTreeNode :: Functor m => (r -> m r') -> (s -> m s') -> (a -> m a') -> DirTreeNode r s a -> m (DirTreeNode r' s' a') Source #

We can fold over a DirTreeNode by providing a function for each case.

IO operations

getFileType :: FilePath -> IO FileType Source #

Check a filepath for Type, throws an IOException if path does not exist.

readPath :: FilePath -> IO (DirTreeNode [String] FilePath ()) Source #

Reads the structure of the filepath

Helpers

type DirTreeN s a = DirTreeNode (FileMap (DirTree s a)) s a Source #

A DirTreeN is a DirTreeNode with a the directory as a recursive DirTree.

FileMap

data FileMap a Source #

A map from file names to

Instances
Functor FileMap Source # 
Instance details

Defined in System.DirTree

Methods

fmap :: (a -> b) -> FileMap a -> FileMap b #

(<$) :: a -> FileMap b -> FileMap a #

Foldable FileMap Source # 
Instance details

Defined in System.DirTree

Methods

fold :: Monoid m => FileMap m -> m #

foldMap :: Monoid m => (a -> m) -> FileMap a -> m #

foldr :: (a -> b -> b) -> b -> FileMap a -> b #

foldr' :: (a -> b -> b) -> b -> FileMap a -> b #

foldl :: (b -> a -> b) -> b -> FileMap a -> b #

foldl' :: (b -> a -> b) -> b -> FileMap a -> b #

foldr1 :: (a -> a -> a) -> FileMap a -> a #

foldl1 :: (a -> a -> a) -> FileMap a -> a #

toList :: FileMap a -> [a] #

null :: FileMap a -> Bool #

length :: FileMap a -> Int #

elem :: Eq a => a -> FileMap a -> Bool #

maximum :: Ord a => FileMap a -> a #

minimum :: Ord a => FileMap a -> a #

sum :: Num a => FileMap a -> a #

product :: Num a => FileMap a -> a #

Traversable FileMap Source # 
Instance details

Defined in System.DirTree

Methods

traverse :: Applicative f => (a -> f b) -> FileMap a -> f (FileMap b) #

sequenceA :: Applicative f => FileMap (f a) -> f (FileMap a) #

mapM :: Monad m => (a -> m b) -> FileMap a -> m (FileMap b) #

sequence :: Monad m => FileMap (m a) -> m (FileMap a) #

FunctorWithIndex String FileMap Source # 
Instance details

Defined in System.DirTree

Methods

imap :: (String -> a -> b) -> FileMap a -> FileMap b #

imapped :: IndexedSetter String (FileMap a) (FileMap b) a b #

FoldableWithIndex String FileMap Source # 
Instance details

Defined in System.DirTree

Methods

ifoldMap :: Monoid m => (String -> a -> m) -> FileMap a -> m #

ifolded :: IndexedFold String (FileMap a) a #

ifoldr :: (String -> a -> b -> b) -> b -> FileMap a -> b #

ifoldl :: (String -> b -> a -> b) -> b -> FileMap a -> b #

ifoldr' :: (String -> a -> b -> b) -> b -> FileMap a -> b #

ifoldl' :: (String -> b -> a -> b) -> b -> FileMap a -> b #

TraversableWithIndex String FileMap Source # 
Instance details

Defined in System.DirTree

Methods

itraverse :: Applicative f => (String -> a -> f b) -> FileMap a -> f (FileMap b) #

itraversed :: IndexedTraversal String (FileMap a) (FileMap b) a b #

Eq a => Eq (FileMap a) Source # 
Instance details

Defined in System.DirTree

Methods

(==) :: FileMap a -> FileMap a -> Bool #

(/=) :: FileMap a -> FileMap a -> Bool #

Ord a => Ord (FileMap a) Source # 
Instance details

Defined in System.DirTree

Methods

compare :: FileMap a -> FileMap a -> Ordering #

(<) :: FileMap a -> FileMap a -> Bool #

(<=) :: FileMap a -> FileMap a -> Bool #

(>) :: FileMap a -> FileMap a -> Bool #

(>=) :: FileMap a -> FileMap a -> Bool #

max :: FileMap a -> FileMap a -> FileMap a #

min :: FileMap a -> FileMap a -> FileMap a #

(Show a, Show b) => Show (FileMap (DirTree a b)) Source # 
Instance details

Defined in System.DirTree

Methods

showsPrec :: Int -> FileMap (DirTree a b) -> ShowS #

show :: FileMap (DirTree a b) -> String #

showList :: [FileMap (DirTree a b)] -> ShowS #

Generic (FileMap a) Source # 
Instance details

Defined in System.DirTree

Associated Types

type Rep (FileMap a) :: Type -> Type #

Methods

from :: FileMap a -> Rep (FileMap a) x #

to :: Rep (FileMap a) x -> FileMap a #

Semigroup a => Semigroup (FileMap a) Source # 
Instance details

Defined in System.DirTree

Methods

(<>) :: FileMap a -> FileMap a -> FileMap a #

sconcat :: NonEmpty (FileMap a) -> FileMap a #

stimes :: Integral b => b -> FileMap a -> FileMap a #

Semigroup a => Monoid (FileMap a) Source # 
Instance details

Defined in System.DirTree

Methods

mempty :: FileMap a #

mappend :: FileMap a -> FileMap a -> FileMap a #

mconcat :: [FileMap a] -> FileMap a #

NFData a => NFData (FileMap a) Source # 
Instance details

Defined in System.DirTree

Methods

rnf :: FileMap a -> () #

type Rep (FileMap a) Source # 
Instance details

Defined in System.DirTree

type Rep (FileMap a) = D1 (MetaData "FileMap" "System.DirTree" "dirtree-0.0.1-LpN3AmmKCsNWVMG7Xg0uO" True) (C1 (MetaCons "FileMap" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Map String a))))

toFileList :: FileMap a -> [(String, a)] Source #

Create a list of pairs of filenames and file values.

fromFileList :: [(String, a)] -> FileMap a Source #

Create a FileMap from a list of pairs of filenames a file values.

(-.>) :: String -> a -> (String, DirTree x a) Source #

(-|>) :: String -> a -> (String, DirTree a x) Source #

(-/>) :: String -> [(String, DirTree a b)] -> (String, DirTree a b) Source #

toDeepFileList :: FileMap (DirTree s a) -> [(FileKey, Either s a)] Source #

Returns a list of FileMap

fromDeepFileList :: [(FileKey, Either s a)] -> FileMap (DirTree s a) Source #

Returns an empty FileMap, if the input list is empty or contains files that does not correspond to a FileMap.

toFileNames :: FileMap a -> [String] Source #

To a list of filenames

lookupFileMap :: String -> FileMap a -> Maybe a Source #

Lookup a file using a filename

emptyFileMap :: FileMap a Source #

empty filemap