2

関数wantneed両方は、入力がFilePathではなく型である必要がありFilePatternます。出力と入力のファイル名は異なるパターンに従います。出力は_build/*checker.shで、入力は./*.py. したがって、私はむしろwant次の形式を実行したいと思います。

want ['_build/*checkers.sh']

よりも

want ['_build/dbchecker.sh', '_build/henk_checker.sh', ..., '_build/derp_checker.sh']

want組み合わせてより複雑なものを構築しようとしましたが、ではなく返されるgetDirectoryFiles, action, needため機能しません。getDirectoryFilesAction [FilePath]FilePath

この問題の適切な解決策は何でしょうか?

4

2 に答える 2

1

Actionモナドであることについての Erik の発言は、非常に役立つことが証明されています。問題は、アクションがすでにRulesモナド内に存在することです - その逆ではありません (エリック、十分に具体的でなくて申し訳ありません)。次のコードは、最終的に解決したものです。

import Development.Shake
import Development.Shake.Command
import Development.Shake.FilePath
import Development.Shake.Util

main :: IO ()
main = shakeArgs shakeOptions{shakeFiles="_build"} (do
  action $ do dependencies <- getDirectoryFiles "" ["*checker.py"]
              let scripts = map (\file -> "_build" </> file -<.> "sh") dependencies
              need scripts)
于 2015-10-28T13:56:38.270 に答える