确保处理所有异常

时间:2018-10-25 20:43:37

标签: haskell exception-handling

this question开始,是否有任何方法可以确保我正在处理所有可能引发的异常?类似于编译器的模式匹配穷举性警告,但有例外。我认为这很有道理...

1 个答案:

答案 0 :(得分:3)

您可以通过SomeException捕获所有异常,但这通常是一个坏主意,因为您最终还会从外部捕获thrown to the thread的异步异常。

在Haskell中,经常使用asynchronous exceptions来触发其他线程signal out of memory errors等的线程取消。而要捕获异步异常的情况很少见。它们在很大程度上与线程正在运行的实际逻辑无关。但是您仍然可以使用bracketfinally之类的函数,以便正确释放被杀死线程所拥有的资源。

safe-exceptionsunliftio之类的软件包可帮助避免错误地捕获异步异常,同时仍提供catchAny之类的函数来捕获其他类型的异常。