如何在Haskell中抛出异常并退出程序?

时间:2011-05-20 10:03:37

标签: exception haskell throw

我有一个问题:如何抛出异常并退出程序?我写了一个简单的例子:

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

我想启动它并抛出异常并退出程序,但是如何?

1 个答案:

答案 0 :(得分:29)

好吧,你可以试试

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类型打包的值或描述失败的其他结构。在返回复杂类型会使其他可重用的接口过于复杂的情况下,异常似乎更合适。