Haskell Shake是否适合为人类用户构建半自动化工具?
如何使填充脚本在每次生成时执行一次“外部”操作Haskell Shake是否适合为人类用户构建半自动化工具?,haskell,shake-build-system,Haskell,Shake Build System,如何使填充脚本在每次生成时执行一次“外部”操作 import Development.Shake main = shakeArgs shakeOptions $ do want [".finished"] ".finished" %> \out -> do liftIO $ putStrLn "You sure?" >> getLine >> putStrLn "Missiles fired!" $runhaskell Main
import Development.Shake
main = shakeArgs shakeOptions $ do
want [".finished"]
".finished" %> \out -> do
liftIO $ putStrLn "You sure?" >> getLine >> putStrLn "Missiles fired!"
$runhaskell Main.hs
你确定?
不
导弹发射!
运行生成系统时出错:
*.完成
错误,规则“.finished”无法生成文件:
.完成
由于您的操作不会生成文件,因此需要将其标记为规则:
对代码的最小修正是使用@Cactus建议的
phony
。另一种方法是直接使用:
import Development.Shake
import Control.Monad (unless)
main = shakeArgs shakeOptions $ do
action $ do
ok <- fmap (== "yes") $ liftIO $ putStrLn "You sure?" >> getLine
unless ok $ fail "Your commitment to the Great War is lacking!"
liftIO $ putStrLn "Missiles fired!"
import Development.Shake
进口管制。单子(除非)
main=shakeArgs shakeOptions$do
行动$do
ok>getLine
除非ok$失败,“你对大战的承诺是缺乏的!”
发射导弹
如果你不想在建造过程中的任何时候运行火力导弹,而是想在最后运行它(在你建造了导弹并储存在锡罐上之后),你可以写:
main = do
shakeArgs shakeOptions $ do
...normal build rules go here...
ok <- fmap (== "yes") $ putStrLn "You sure?" >> getLine
unless ok $ fail "Your commitment to the Great War is lacking!"
putStrLn "Missiles fired!"
main=do
shakeArgs shakeOptions$do
…正常的构建规则在这里。。。
ok>getLine
除非ok$失败,“你对大战的承诺是缺乏的!”
“发射导弹!”
在这里,您正在使用普通的Haskell在运行Shake build之后发射导弹。只需确保您没有提前开始执行“重新填充地球”操作即可。那可能会变成。。。尴尬。
import Development.Shake
import Control.Monad (unless)
main = shakeArgs shakeOptions $ do
action $ do
ok <- fmap (== "yes") $ liftIO $ putStrLn "You sure?" >> getLine
unless ok $ fail "Your commitment to the Great War is lacking!"
liftIO $ putStrLn "Missiles fired!"
main = do
shakeArgs shakeOptions $ do
...normal build rules go here...
ok <- fmap (== "yes") $ putStrLn "You sure?" >> getLine
unless ok $ fail "Your commitment to the Great War is lacking!"
putStrLn "Missiles fired!"