exception - librerias - palabras reservadas en haskell
¿Cómo lanzar una excepción y salir del programa en Haskell? (1)
Tengo una pregunta: ¿cómo puedo lanzar una excepción y salir del programa? He escrito un ejemplo simple:
-- 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 comenzar esto y lanzar una excepción y salir del programa, pero ¿cómo?
Bueno, podrías intentarlo
foo :: String -> IO ()
foo x = do
if null x
then error "Oops!" else putStrLn "okay"
O bien, si tiene la intención de detectar el error eventualmente, 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 de haskelly que puede usar, como devolver valores empaquetados en el tipo Maybe o alguna otra estructura que describa el fallo. Las excepciones parecen encajar mejor en los casos en que la devolución de tipos complicados complicaría demasiado las interfaces reutilizables.