2011-05-20 23 views
14

Tengo una pregunta: ¿cómo puedo lanzar una excepción y salir del programa? He writen abajo de un ejemplo sencillo:¿Cómo lanzar una excepción y salir del programa en Haskell?

-- main.hs 
import Test 

main = do 
    Test.foo "" 
    putStrLn "make some other things" 

Aquí está el módulo:

moldule Test where 

foo :: String -> IO() 
foo x = do 
    if null x 
    then THROW EXCEPTION AND EXIT MAIN else putStrLn "okay" 

quiero empezar esto y lanzar una excepción y salir del programa, pero ¿cómo?

Respuesta

26

Bueno, podría intentar

foo :: String -> IO() 
foo x = do 
    if null x 
    then error "Oops!" else putStrLn "okay" 

O, si la intención de detectar el error con el tiempo, entonces

import Control.Exception 
data MyException = ThisException | ThatException 
    deriving (Show, Typeable) 

instance Exception MyException 

... 

foo :: String -> IO() 
foo x = do 
    if null x 
    then throw ThisException else putStrLn "okay" 

A menudo hay más mecanismos haskelly que usted podría utilizar, como los valores de regresar embalado en el tipo Maybe o en alguna otra estructura que describa la falla. Las excepciones parecen ajustarse mejor en los casos en que la devolución de tipos complicados complicaría demasiado las interfaces que de otra manera serían reutilizables.

Cuestiones relacionadas