在base 4.4.0.0 的Control.Exception文档中,有一个如何创建异常层次结构的示例。该示例展示了如何通过在Exception类的实例中声明父异常来捕获特定异常的泛化。这很酷,但是我该如何使我的异常成为现有异常的子类呢?例如,我想制作通过IOException类型约束捕获的异常。Control.Exception中的示例展示了这一点:
*Main> throw MismatchedParentheses catch (\e -> putStrLn ("Caught " ++ show (e :: SomeCompilerException)))
Caught MismatchedParentheses
*Main> throw MismatchedParentheses catch (\e -> putStrLn ("Caught " ++ show (e :: IOException)))
*** Exception: MismatchedParentheses
我如何使用IOException约束来捕获我的异常?
Source
超链接以查看正确的定义(如果我在这里复制它,SO 也可能会错误地渲染它...)。 - stephen tetley