我是 Haskell 新手。
我的目标是将文件从一个目录复制到另一个目录。
到目前为止我所拥有的:
我有两个包含完整路径文件名的列表
list1 = ["file1", "file2" ...]
list2 = ["new name1", "new name2"...]
我想使用
copyFile::FilePath->FilePath->IO()
将文件从列表1复制到列表2
注意: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 ()
如果您使用copyFile
zip
,您将得到:
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 [...] [...]
)。
关于haskell - 从 Haskell 中的两个列表复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34386146/