2011-11-19 14 views
6

Çok fazla IO yapan ana işlevim var. Ancak bir noktada, not (null shouldBeNull) gibi bir değişkeni tüm programdan çıkmadan, linux çıkış kodu 1 ile devam etmeden kontrol etmek ve bir hata mesajı vermek istiyorum.Haskell'de ana durumdan nasıl çıkılır

Bir if o koymak gibi error "..." ile oynamak denedim. :(

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

ama parse error (possibly incorrect indentation) olsun İşte

değişmiş bir parçacık İşte

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

Fark edeceğiniz gibi, benkoyduğum yeri kontrol etmek istiyorumyorum yukarıda ...

Yardımlarınız için teşekkürler!

cevap

12

then anahtar kelimesiyle eşleşen if ifadesinden ötürü ayrıştırma hatası. çıkışmasını

if condition then truePart else falsePart 

, error daha uygun bir seçenek, örneğin exitFailure için, System.Exit gelen işlevlerinden birini kullanmak olabilir.

Yani, örneğin,

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

Veya, bir önemsiz "Tamam", 'ithal Control.Monad' ve' badThingHappened exitFailure' yazdırmak için değil. –

İlgili konular