当前位置:  开发笔记 > 编程语言 > 正文

来自Haskell中两个列表的copyFile

如何解决《来自Haskell中两个列表的copyFile》经验,为你挑选了1个好方法。

我是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

但它不起作用.

任何建议将不胜感激



1> jpvillaisaza..:

以来

zipWith :: (a -> b -> c) -> [a] -> [b] -> [c] 

System.Directory.copyFile :: FilePath -> FilePath -> IO ()

如果你zipcopyFile,你得到:

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 [...] [...]).


`Control.Monad`还提供`zipWithM`和`zipWithM_`.
推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有