2011-11-19 5 views
6

私は多くのIOを行う主な機能を持っています。しかし、ある時点で、not (null shouldBeNull)のような変数をチェックして、Linuxのexitcode 1で続行せずにプログラム全体を終了し、エラーメッセージを出力したいとします。条件が与えられたときにhaskellでmainを終了するには

私はifであることを置くようerror "..."で遊んで試してみた:。

if (not (null shouldBeNull)) error "something bad happened" else putStrLn "ok"

が、私はparse error (possibly incorrect indentation) :(を取得

ここでは、変更されたスニペットです

main :: IO ExitCode 
main = do 
    --Get the file name using program argument 
    args <- getArgs 
    file <- readFile (args !! 0) 
    putStrLn("\n") 
    -- ... (some other io) 
    -- [DO A CHECK HERE], exit according to check.. 
    -- ... (even more io) 
    echotry <- system "echo success" 
    rmtry <- system "rm -f test.txt" 
    system "echo done." 

お気づきのように、私が入れたところでチェックしたいと思います[DO A CHECK HERE]上記のコメント...

ありがとうございました!

答えて

12

if式にthenというキーワードが指定されていないため、解析エラーが発生します。出るため

if condition then truePart else falsePart 

errorより適切な選択は、例えばexitFailureため、System.Exitから機能のいずれかを使用するかもしれません。

したがって、たとえば、

if not $ null shouldBeNull 
    then do putStrLn "something bad happened" 
      exitFailure 
    else putStrLn "ok" 
+7

かは、重要でない "OK"、 '輸入Control.Monad'と' badThingHappened exitFailure'をプリントアウトすることがありません。 –

関連する問題