Как выйти из main в haskell при условии

у меня есть основная функция, которая делает много ИО. В какой-то момент, однако, я хочу проверить переменную, такую как not (null shouldBeNull) закройте всю программу, не продолжая, с помощью кода выхода linux 1 и выведите сообщение об ошибке.

Я пробовал играть с error "..." Как положить, что в if:

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] комментарий выше...

Спасибо за вашу помощь!

1 ответов


ошибка разбора заключается в том, что вы пропускаете then ключевое слово в вашем if выражение.

if condition then truePart else falsePart

для выхода, более подходящий выбор, чем error можно использовать одну из функций System.Exit, например exitFailure.

так, например,

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