Text.ProjectTemplate

project-template-0.2.0: Specify Haskell project templates and generate files

Safe Haskell | None
Language | Haskell98

Text.ProjectTemplate

Contents

- Create a template
- Unpack a template
  - Receivers
- Exceptions

Synopsis

- createTemplate :: Monad m => Conduit (FilePath, m ByteString) m ByteString
- unpackTemplate :: MonadThrow m => (FilePath -> Sink ByteString m ()) -> (Text -> Text) -> Sink ByteString m ()
- type FileReceiver m = FilePath -> Sink ByteString m ()
- receiveMem :: MonadWriter (Map FilePath ByteString) m => FileReceiver m
- receiveFS :: MonadResource m => FilePath -> FileReceiver m
- data ProjectTemplateException
  - = InvalidInput Text
  - | BinaryLoopNeedsOneLine

# Create a template

createTemplate :: Monad m => Conduit (FilePath, m ByteString) m ByteString #

Create a template file from a stream of file/contents combinations.

Since 0.1.0

# Unpack a template

unpackTemplate #

Arguments

:: MonadThrow m |
=> (FilePath -> Sink ByteString m ()) | receive individual files
-> (Text -> Text) | fix each input line, good for variables
-> Sink ByteString m () |

Unpack a template to some destination. Destination is provided by the first argument.

The second argument allows you to modify the incoming stream, usually to replace variables. For example, to replace PROJECTNAME with myproject, you could use:

    Data.Text.replace "PROJECTNAME" "myproject"

Note that this will affect both file contents and file names.

Since 0.1.0

## Receivers

type FileReceiver m = FilePath -> Sink ByteString m () #

The first argument to `unpackTemplate`, specifying how to receive a file.

Since 0.1.0

receiveMem :: MonadWriter (Map FilePath ByteString) m => FileReceiver m #

Receive files to a `Writer` monad in memory.

    execWriter $ runExceptionT_ $ src $$ unpackTemplate receiveMem id

Since 0.1.0

receiveFS #

Arguments

:: MonadResource m |
=> FilePath | root
-> FileReceiver m |

Receive files to the given folder on the filesystem.

    unpackTemplate (receiveFS "some-destination") (T.replace "PROJECTNAME" "foo")

Since 0.1.0

# Exceptions

data ProjectTemplateException #

Exceptions that can be thrown.

Since 0.1.0

Constructors

InvalidInput Text |
BinaryLoopNeedsOneLine |

Instances

Show ProjectTemplateException # |
Methods showsPrec :: Int -> ProjectTemplateException -> ShowS # show :: ProjectTemplateException -> String # showList :: [ProjectTemplateException] -> ShowS #
Exception ProjectTemplateException # |
Methods toException :: ProjectTemplateException -> SomeException # fromException :: SomeException -> Maybe ProjectTemplateException # displayException :: ProjectTemplateException -> String #