Как выйти из главного в haskell при условии - PullRequest
6 голосов
/ 20 ноября 2011

У меня есть основная функция, которая выполняет много операций ввода-вывода.В какой-то момент, однако, я хочу проверить переменную, такую ​​как 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 Ответ

12 голосов
/ 20 ноября 2011

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

if condition then truePart else falsePart

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

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

if not $ null shouldBeNull
    then do putStrLn "something bad happened"
            exitFailure
    else putStrLn "ok"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...