directory-layout-0.4.0.0: Declare, construct and verify directory layout

Safe HaskellNone

System.Directory.Layout

Contents

Description

Language to express directory layouts

Synopsis

Layout declaration

data Node a Source

A representation of directory layouts

Invariants:

  • F second argument is never D _ _ _ or F _ _ _ itself
  • F third argument is never T _ _
  • D second argument is never T _ _
  • D third argument is never T _ _

Instances

Monad Node

All this crazy stuff is only to get do-notation basically.

Bind (<-) in that do-notation is useless at best (You only can get ()s from Layout) and harmful at worst (If you manage to create your own Node values with something more interesting than ())

Functor Node 
Applicative Node 
Foldable Node 
Traversable Node 
Apply Node 
Bind Node 
Eq a => Eq (Node a) 
Ord a => Ord (Node a) 
Read a => Read (Node a) 
Show a => Show (Node a) 
Default a => Monoid (Node a) 
Default a => Default (Node a) 
Semigroup (Node a) 

type Layout = Node ()Source

Type synonym to save some acrobatics

file :: FilePath -> Text -> LayoutSource

Declare file with specified contents

file_ :: FilePath -> LayoutSource

Declare empty file

directory :: FilePath -> Layout -> LayoutSource

Declare directory with specified listing

directory_ :: FilePath -> LayoutSource

Declare empty directory

Layout construction

fromDirectory :: FilePath -> IO (Either IOException Layout)Source

Create layout from directory

Canonicalizes path before traversing, generally understands only regular files and directories and ignores anything else it could not understand

Layout traverses

makeSource

Arguments

:: Layout 
-> FilePath

Root directory

-> IO [LayoutException]

List of warnings

Make layout as specified

For example, suppose you are in an empty directory

 % tree
 .

and you've written simple layout:

 layout = do
   directory "baz" $
     file_ "twey"
   directory "foo" $ do
     directory "bar" $ do
       file_ "quuz"
       file_ "tatata"
     file_ "quux"

then running it should result in this directory tree:

 % tree
 .
 ├── baz
 │   └── twey
 └── foo
     ├── bar
     │   ├── quuz
     │   └── tatata
     └── quux

checkSource

Arguments

:: Layout 
-> FilePath

Root directory

-> IO [LayoutException]

List of failures

Check directory layout agrees with specified one

For example, suppose there is a tree:

 % tree
 .
 ├── baz
 │   └── twey
 └── foo
     ├── bar
     │   ├── quuz
     │   └── tatata
     └── quux

then you can write:

 layout = do
   directory "baz" $
     file_ "twey"
   directory "foo" $ do
     directory "bar" $ do
       file_ "quuz"
       file_ "tatata"
     file_ "quux"

and running check layout "." should result in []

Errors

data LayoutException Source

Information about cought exceptions in various routines