haskell - 从 Haskell 中的两个列表复制文件

标签 haskell

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

如果您使用copyFilezip,您将得到:

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/

相关文章:

haskell - Data.Vector.Mutable 字段无法正确写入/设置? : Haskell

haskell - 为什么积分约束在调用长度时需要 fromIntegral ?

Haskell:如何获取具有多个参数的数据类型的类型(如 `Path a b = ..`

haskell - 测试 IORef 身份?

Haskell 获取大整数的大小

parsing - 如何使用 BNFC 定义 INI 文件语法?

haskell - 如何用递归定义遍历 Monad 并收集结果?

haskell - 围请求复制

haskell - 为什么 Haskell 让我返回一个空列表,其中列表中的列表是预期的?

haskell - 纯函数式语言中的高效堆