2011-05-20 90 views
14

我有一个问题:如何抛出异常并退出程序?我已经writen下来一个简单的例子:如何抛出异常并退出Haskell中的程序?

-- main.hs 
import Test 

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

这里是模块:

moldule Test where 

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

我要开始这一点,并抛出一个异常,并退出程序,但如何?

回答

26

那么,你可以尝试

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

或者,如果你打算最终捕获错误,然后

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" 

经常有更haskelly机制,你可以使用,比如返回值打包在Maybe类型或描述失败的其他结构中。在返回复杂类型会使其他可重用接口过于复杂的情况下,异常似乎更适合。