proposed addition to System.Directory

Ross Paterson ross at
Wed Jan 12 05:31:09 EST 2005

I find the following generalization of copyFile useful.  Perhaps it
could be added to System.Directory.

{- |@'copyContents' old new@ copies the contents of /old/ to /new/,
creating /new/ if it does not already exist.
However the parent directory of /new/ must already exist.
If /old/ is a plain file, 'copyContents' is equivalent to 'copyFile'.
If /old/ is a directory, its contents are recursively copied into /new/,
which, if it already exists, must be a directory.
copyContents :: FilePath -> FilePath -> IO ()
copyContents fromFPath toFPath = do
  isFile <- doesFileExist fromFPath
  if isFile then
    copyFile fromFPath toFPath
   else do
    contents <- getDirectoryContents fromFPath
    createDirectoryIfMissing False toFPath
    sequence_ [copyContents (fromFPath `joinFileName` f)
				(toFPath `joinFileName` f) |
		f <- contents, f /= "." && f /= ".."]

More information about the Libraries mailing list