hscaffold-0.4.1.0: src/Hscaffold/EDSL.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
module Hscaffold.EDSL where
import Control.Monad.Writer
import Data.Text (Text)
import System.Directory
import Hscaffold.Types
-- | Create a directory with the nested contents
directory :: MonadWriter (ScaffoldAction e) m
=> FilePath
-> WriterT (ScaffoldAction e) m b
-> m b
directory fp nested = do
(x, nested') <- runWriterT nested
tell [ Directory fp nested' ]
return x
-- | Create a directory with the nested contents and permissions
directoryWith :: MonadWriter (ScaffoldAction e) m
=> Permissions
-> FilePath
-> WriterT (ScaffoldAction e) m b
-> m b
directoryWith perms fp nested = do
x <- directory fp nested
tell [ SetPermissions perms fp ]
return x
-- | Create a file with the given contents
file :: MonadWriter (ScaffoldAction e) m => FilePath -> Text -> m ()
file fp txt = tell [ File fp txt ]
-- | Create a file with the given contents and permissions
fileWith :: MonadWriter (ScaffoldAction e) m
=> Permissions
-> FilePath
-> Text
-> m ()
fileWith perms fp txt = do
file fp txt
tell [ SetPermissions perms fp ]
-- | Set permissions on a filepath
permissions :: MonadWriter (ScaffoldAction e) m
=> FilePath
-> Permissions
-> m ()
permissions fp perms = tell [ SetPermissions perms fp ]
-- | Create a symbolic link between two filepaths
link :: MonadWriter (ScaffoldAction e) m => FilePath -> FilePath -> m ()
link fp1 fp2 = tell [ Link fp1 fp2 ]
-- | Write the empty string to a file
touch :: MonadWriter (ScaffoldAction e) m => FilePath -> m ()
touch fp = file fp ""
-- | Write the empty string to a file with given permissions
touchWith :: MonadWriter (ScaffoldAction e) m => Permissions -> FilePath -> m ()
touchWith perms fp = fileWith perms fp ""
-- | Copy a file from A to B
--
-- Non-absolute paths are treated relative to the *current* root, nested blocks
-- change the root
copy :: MonadWriter (ScaffoldAction e) m => FilePath -> FilePath -> m ()
copy fp1 fp2 = tell [ Copy fp1 fp2 ]
-- | Copy a file from A to B and set permissions on B, see 'copy'
copyWith :: MonadWriter (ScaffoldAction e) m
=> Permissions
-> FilePath
-> FilePath
-> m ()
copyWith perms fp1 fp2 = do
copy fp1 fp2
permissions fp2 perms