2011-05-20 96 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類型或描述失敗的其他結構中。在返回複雜類型會使其他可重用接口過於複雜的情況下,異常似乎更適合。