Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell Shake是否适合为人类用户构建半自动化工具?_Haskell_Shake Build System - Fatal编程技术网

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!"