【问题标题】:How to throw an exception and exit the program in Haskell?如何在 Haskell 中抛出异常并退出程序?
【发布时间】:2011-08-29 13:03:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: exception haskell throw


    【解决方案1】:

    嗯,你可以试试

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 2011-12-12
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      相关资源
      最近更新 更多