2
我覺得第一Shake
使用演示模式,似乎很容易出錯的example:爲什麼Shake依賴關係是明確「需要」的?
contents <- readFileLines $ out -<.> "txt"
need contents
cmd "tar -cf" [out] contents
爲什麼我們需要need contents
時readFileLines
讀取它們和cmd
引用他們呢?這是否可以避免要求ApplicativeDo
?
我試着詳細闡述一個答案,但我不確定我真的知道問題的核心。你認爲潛在的錯誤是什麼?您如何看待'ApplicativeDo'可能會有所幫助? –
@尼爾,感謝你的開放態度:)所以這裏是我的看法。對於Haskell中沒有經驗的人來說,任何看起來「不必要」的代碼都會引發像「爲什麼你會推薦這樣寫」這樣的問題?這是否解決了懶惰IO問題?這是你如何調整並行任務到「Monad」接口(與'ApplicativeDo'的Haxl'相比)?爲什麼不用輸入文件的正確語義來定義'tar'目標呢?儘管我可能對「Shake」下的複雜Haskell內容過於謹慎。 – sevo
所以你問爲什麼'需要'是必要的?這是必要的,因爲你必須告訴Shake'tar'將使用什麼,因爲它不知道'tar'的作用。你說得對,人們可以定義'tar inp out =需要inp; cmd「tar -cf」[out] inp' - 事實上,在一個更大的構建系統中,我會鼓勵這樣做。 –