我发现第一个使用示例Shake
展示了一种似乎容易出错的模式:
contents <- readFileLines $ out -<.> "txt"
need contents
cmd "tar -cf" [out] contents
为什么我们需要need contents
阅读readFileLines
它们并cmd
引用它们?这样我们可以避免要求ApplicativeDo
吗?
我发现第一个使用示例Shake
展示了一种似乎容易出错的模式:
contents <- readFileLines $ out -<.> "txt"
need contents
cmd "tar -cf" [out] contents
为什么我们需要need contents
阅读readFileLines
它们并cmd
引用它们?这样我们可以避免要求ApplicativeDo
吗?
我认为部分混淆可能是contents
. 该文件out -<.> "txt"
包含文件名列表,文件名列表也是如此contents
。当我们need contents
要求创建和依赖文件本身时,使用文件名来指定哪些文件。当我们传递contents
给时,cmd
我们传递tar
将用于查询文件的文件名。
所以关键是它readFileLines
不读取有问题的文件,它只从另一个文件中读取文件名。我们必须使用need
确保使用文件是好的,然后我们实际使用cmd
. 查看这三行的另一种方法是:
那有意义吗?没有任何关系ApplicativeDo
——它的存在对我们毫无帮助。