在Haskell摇一摇,我要文件模式怎么办?
In Haskell Shake, how can I want a file pattern?
我在源目录中有一个包含 xml 个文件的目录,我想将其转换为目标目录中包含 html 个文件的目录。似乎我可以使用 getDirectoryFiles
从目录中获取文件,但那是一个 Action,want
不需要 Action [FilePath]
而只需要 [FilePath]
。我怎样才能在 Shake 中做类似 want ["dest/*.html"]
的事情?
getDirectoryFiles
returns 是 Action
monad 的结果,但是 want
returns 是 Rules
monad 的结果。您可能指的是 need
,这与 want
基本相同,但在 Action
中。然后像使用任何其他 monad 一样使用 >>=
或 do
块:
do
directoryFiles <- getDirectoryFiles path patterns
need directoryFiles
如果你想在那之后回到 Rules
,然后将整个 do
块包装在对 action
.
的调用中
如果我没理解错的话,你可以这样做。
首先,编写一个规则,从 xml.[= 创建 html 文件15=]
main = shakeArgs shakeOptions $ do
"dest/*.html" %> \out -> do
let src = "source" </> dropDirectory1 out -<.> "xml"
-- todo: generate out (HTML) from src (XML)
然后您可以通过 action
编写一个规则,在每次构建执行中都将 运行。
main = shakeArgs shakeOptions $ do
action $ do
srcs <- getDirectoryFiles "source" ["*.xml"]
need ["dest" </> src -<.> "html" | src <- srcs]
"dest/*.html" %> \out -> do
let src = "source" </> dropDirectory1 out -<.> "xml"
-- todo: translate HTML(out) from XML(src)
供您参考,want
定义如下:want xs = action $ need xs
。
我在源目录中有一个包含 xml 个文件的目录,我想将其转换为目标目录中包含 html 个文件的目录。似乎我可以使用 getDirectoryFiles
从目录中获取文件,但那是一个 Action,want
不需要 Action [FilePath]
而只需要 [FilePath]
。我怎样才能在 Shake 中做类似 want ["dest/*.html"]
的事情?
getDirectoryFiles
returns 是 Action
monad 的结果,但是 want
returns 是 Rules
monad 的结果。您可能指的是 need
,这与 want
基本相同,但在 Action
中。然后像使用任何其他 monad 一样使用 >>=
或 do
块:
do
directoryFiles <- getDirectoryFiles path patterns
need directoryFiles
如果你想在那之后回到 Rules
,然后将整个 do
块包装在对 action
.
如果我没理解错的话,你可以这样做。
首先,编写一个规则,从 xml.[= 创建 html 文件15=]
main = shakeArgs shakeOptions $ do
"dest/*.html" %> \out -> do
let src = "source" </> dropDirectory1 out -<.> "xml"
-- todo: generate out (HTML) from src (XML)
然后您可以通过 action
编写一个规则,在每次构建执行中都将 运行。
main = shakeArgs shakeOptions $ do
action $ do
srcs <- getDirectoryFiles "source" ["*.xml"]
need ["dest" </> src -<.> "html" | src <- srcs]
"dest/*.html" %> \out -> do
let src = "source" </> dropDirectory1 out -<.> "xml"
-- todo: translate HTML(out) from XML(src)
供您参考,want
定义如下:want xs = action $ need xs
。