hcltest-0.1: src/Test/HClTest/Setup.hs
module Test.HClTest.Setup
( copyFiles
, copyFilesHere
) where
import Control.Monad (foldM)
import Data.Foldable (for_)
import System.Directory
import System.FilePath
-- | partitionM is to partition like filterM is to filter.
partitionM :: Monad m => (a -> m Bool) -> [a] -> m ([a],[a])
partitionM f = flip foldM ([],[]) $ \(a,b) x -> do
v <- f x
return $ if v then (x:a,b) else (a,x:b)
-- | @copyFiles source target@ copies all the files in the @source@ directory to the directory @target@.
copyFiles :: FilePath -> FilePath -> IO ()
copyFiles source target = do
(files,dirs) <- partitionM (doesFileExist . (source </>)) . filter (not . (`elem` [".",".."])) =<< getDirectoryContents source
for_ files $ \file -> copyFile (source </> file) $ target </> file
for_ dirs $ \dir -> do
createDirectory $ target </> dir
copyFiles (source </> dir) $ target </> dir
-- | @copyFilesHere source@ copies all the files from source to the current directory.
copyFilesHere :: FilePath -> IO ()
copyFilesHere = flip copyFiles "."