gpt4 book ai didi

Haskell 可扩展 IO 异常?

转载 作者:行者123 更新时间:2023-12-03 13:44:44 27 4
gpt4 key购买 nike

Control.Exception 的文档中在 base 4.4.0.0 中有一个如何创建异常层次结构的示例。该示例展示了如何通过根据父异常声明 Exception 类的实例来捕获特定异常的概括。这很酷,但我如何让我的异常(exception)成为现有异常(exception)的 child 。例如,我想创建由 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 约束来捕获我的异常?

最佳答案

你不能。 IOException并非旨在以这种方式进行扩展。

通常,您不能随意扩展现有数据类型。这样做是有充分理由的,因为它需要现有函数知道如何处理新值。有很多方法可以解决这个问题,但它们都需要在设计数据类型时考虑到这一点。

不过,我不清楚为什么要将自定义异常视为 IO 异常。如果您想同时捕获这两种类型,只需嵌套 catch 的应用程序即可。 ,每种类型一个。或者也许最好扭转局面并允许 IO 异常包含在您自己的异常类型中。文档已经有很好的例子来说明如何做到这一点。这一切都归结为您想要实现的目标。

关于Haskell 可扩展 IO 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7540921/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com