2011-11-19 15 views
6

Tengo una función principal que hace mucho IO. En un punto, sin embargo, quiero verificar que una variable como not (null shouldBeNull) salga de todo el programa, sin continuar, con un código de salida de Linux 1 y genere un mensaje de error.Cómo salir de main en haskell con una condición

He intentado jugar con error "..." como poner que en un if:.

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

pero consigo un parse error (possibly incorrect indentation) :(

He aquí un fragmento alterado

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

Como habrás notado, quiero hacer el cheque donde puse [DO A CHECK HERE] comentario anterior ...

Gracias por su ayuda!

Respuesta

12

El error de análisis se debe a que falta la palabra clave then en la expresión if.

if condition then truePart else falsePart 

para salir, una elección más apropiada que error podría ser utilizar una de las funciones de System.Exit, por ejemplo exitFailure.

Así, por ejemplo,

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

O, para no imprimir un poco importante "ok", '' Control.Monad' importación y cuando badThingHappened exitFailure'. –

Cuestiones relacionadas