Hao*_*eke 3 haskell build pandoc shake-build-system
我正在切换(或尝试)从辉煌的tup到haskell摇动作为我的构建系统..
只有我无法弄清楚如何在变化时重建文件.
我当然可以使用inotify或像filewatcher甚至是守望者这样的包装器.
因为我正在使用摇动,我想知道如何与twitch共享do语法,但在其他方面没有提供太多的文档..
最终目标是将pandoc用于多格式文档.
tup不充分的唯一原因是因为它不支持目标.
首先,您应该编写自己的shake构建规则.然后,当某个源文件发生更改时,您应该运行构建规则来生成目标.
像这样:
main = defaultMain $ do
"src/*.md" |> const build
build = shakeArgs shake{shakeFiles="out"} $ do
want ["out/foo.html", "out/foo.pdf"]
"out/*.html" %> \out -> do
let src = "src" </> dropDirectory1 out -<.> "md"
cmd_ "pandoc -o" [out] src
"out/*.pdf" %> \out -> do
let src = "src" </> dropDirectory1 out -<.> "md"
cmd_ "pandoc -o" [out] src
Run Code Online (Sandbox Code Playgroud)
当在降价文件src目录将被改变,那么out/foo.html和out/foo.pdf将被更新.
如果你想优化shake当时的工作,你可以这样做:
main = defaultMain $ do
"src/*.md" |> build . dependentTargets
build targets = shakeArgs shake{shakeFiles="out"} $ do
want targets
...
dependentTargets src
| "*.md" ?== src = ["out/foo.html", "out/foo.pdf"]
| otherwise = []
Run Code Online (Sandbox Code Playgroud)
该软件包twitch建议使用扩展名OverloadedStrings来编译代码,如下所示:
"src/*.md" |> ...
Run Code Online (Sandbox Code Playgroud)
但这会导致程序其他部分的代码含糊不清.要修复它,您可以显式转换String为Dep这样:
import Data.String
fromString "src/*.md" |> ...
Run Code Online (Sandbox Code Playgroud)
您可以通过重新定义(|>)运算符来改进此代码:
import Data.String
import Twitch hiding ((|>))
pattern |> callback = addModify callback $ fromString pattern
"src/*.md" |> ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |