hscaffold-0.4.0.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