3

我发现第一个使用示例Shake展示了一种似乎容易出错的模式:

    contents <- readFileLines $ out -<.> "txt"
    need contents
    cmd "tar -cf" [out] contents

为什么我们需要need contents阅读readFileLines它们并cmd引用它们?这样我们可以避免要求ApplicativeDo吗?

4

1 回答 1

2

我认为部分混淆可能是contents. 该文件out -<.> "txt"包含文件名列表,文件名列表也是如此contents。当我们need contents要求创建和依赖文件本身时,使用文件名来指定哪些文件。当我们传递contents给时,cmd我们传递tar将用于查询文件的文件名。

所以关键是它readFileLines不读取有问题的文件,它只从另一个文件中读取文件名。我们必须使用need确保使用文件是好的,然后我们实际使用cmd. 查看这三行的另一种方法是:

  1. 我们要对哪些文件进行操作?
  2. 确保这些文件已准备就绪。
  3. 使用这些文件。

那有意义吗?没有任何关系ApplicativeDo——它的存在对我们毫无帮助。

于 2016-02-29T19:40:12.020 回答