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

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

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

最佳答案

嗯,你可以试试

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

关于exception - 如何在 Haskell 中抛出异常并退出程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6070316/

相关文章:

list - 如何用惯用的方式编写这个函数?

c++ - 为什么抛出引用调用复制构造函数的异常?

java - 如何以及在何处捕获 j2ee 应用程序中的异常

java - Google App Engine Jersey 错误格式 json

haskell - 制作类型类,不能从上下文中推断

java - 找到一个被捕获的异常

Java 异常阻止关闭程序(单击 X 按钮时)

java - 为什么我要捕获异常

exception - 我可以选择哪些选项来寻找 Monotouch 异常(例如 "System.Exception: Selector invoked from objective-c on a managed object that has been GC' ed”)?

parsing - 在 Haskell 中派生 Read(和 Show)时避免反斜杠编码 utf8 字符