19

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

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

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

4

1 回答 1

35

嗯,你可以试试

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"

您通常可以使用更复杂的机制,例如返回包装在 Maybe 类型或其他描述故障的结构中的值。在返回复杂类型会使其他可重用接口过于复杂的情况下,异常似乎更适合。

于 2011-05-20T10:12:25.307 回答