-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Specify Haskell project templates and generate files
--   
--   See initial blog post for explanation:
--   <a>http://www.yesodweb.com/blog/2012/09/project-templates</a>
@package project-template
@version 0.2.0

module Text.ProjectTemplate

-- | Create a template file from a stream of file/contents combinations.
--   
--   Since 0.1.0
createTemplate :: Monad m => Conduit (FilePath, m ByteString) m ByteString

-- | 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:
--   
--   <pre>
--   Data.Text.replace "PROJECTNAME" "myproject"
--   </pre>
--   
--   Note that this will affect both file contents and file names.
--   
--   Since 0.1.0
unpackTemplate :: MonadThrow m => (FilePath -> Sink ByteString m ()) -> (Text -> Text) -> Sink ByteString m ()

-- | The first argument to <a>unpackTemplate</a>, specifying how to receive
--   a file.
--   
--   Since 0.1.0
type FileReceiver m = FilePath -> Sink ByteString m ()

-- | Receive files to a <tt>Writer</tt> monad in memory.
--   
--   <pre>
--   execWriter $ runExceptionT_ $ src $$ unpackTemplate receiveMem id
--   </pre>
--   
--   Since 0.1.0
receiveMem :: MonadWriter (Map FilePath ByteString) m => FileReceiver m

-- | Receive files to the given folder on the filesystem.
--   
--   <pre>
--   unpackTemplate (receiveFS "some-destination") (T.replace "PROJECTNAME" "foo")
--   </pre>
--   
--   Since 0.1.0
receiveFS :: MonadResource m => FilePath -> FileReceiver m

-- | Exceptions that can be thrown.
--   
--   Since 0.1.0
data ProjectTemplateException
InvalidInput :: Text -> ProjectTemplateException
BinaryLoopNeedsOneLine :: ProjectTemplateException
instance GHC.Show.Show Text.ProjectTemplate.ProjectTemplateException
instance GHC.Exception.Exception Text.ProjectTemplate.ProjectTemplateException
