2011-11-19 25 views
6

Tôi có chức năng chính thực hiện rất nhiều IO. Tại một thời điểm, tuy nhiên, tôi muốn kiểm tra một biến như not (null shouldBeNull) thoát khỏi toàn bộ chương trình, mà không cần tiếp tục, với một linux exitcode 1 và xuất ra một thông báo lỗi.Cách thoát chính trong haskell với điều kiện

Tôi đã thử chơi xung quanh với error "..." giống như đặt rằng trong một if:.

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

nhưng tôi nhận được một parse error (possibly incorrect indentation) :(

Dưới đây là một đoạn thay đổi

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

Như bạn có thể thấy, tôi muốn kiểm tra nơi tôi đã đặt [DO A CHECK HERE] nhận xét ở trên ...

Cảm ơn sự giúp đỡ của bạn!

Trả lời

12

Lỗi phân tích cú pháp là vì bạn thiếu từ khóa then trong biểu thức if của mình.

if condition then truePart else falsePart 

Đối với thoát, một lựa chọn thích hợp hơn error có thể sử dụng một trong các chức năng từ System.Exit, ví dụ exitFailure.

Vì vậy, ví dụ,

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

Hoặc, không để in ra một "ok", 'Control.Monad' nhập khẩu quan trọng và 'khi badThingHappened exitFailure'. –

Các vấn đề liên quan