我是Haskell的新手.
我的目标是将文件从一个目录复制到其他目录.
到目前为止我所拥有的:
我有两个列表包含完整路径文件名
list1 = ["file1", "file2" ...] list2 = ["new name1", "new name2"...]
我想用
copyFile::FilePath->FilePath->IO()
将文件从list1复制到list2
注意:list2包含所有新的完整路径文件名
我知道
zipWith(a->b->c)->[a]->[b]->[c]
我试着
zipWith(copyFile) list1 list2
但它不起作用.
任何建议将不胜感激
以来
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
和
System.Directory.copyFile :: FilePath -> FilePath -> IO ()
如果你zip
有copyFile
,你得到:
zipWith copyFile :: [FilePath] -> [FilePath] -> [IO ()]
也就是说,给定两个文件路径列表,您将获得每个操作复制文件的操作列表.您可以使用sequence_
以下方法评估此类操作列表:
sequence_ :: (Foldable t, Monad m) => t (m a) -> m ()
(在这种情况下,sequence_ :: [IO ()] -> IO ()
).
因此,像
sequence_ (zipWith copyFile ["foo", "bar"] ["new_foo", "new_bar"])
会对你有用.
编辑:更好,正如Daniel Wagner所建议的,使用Control.Monad.zipWithM_
(zipWithM_ copyFile [...] [...]
).