haskell - 带字符串参数的通用异常

标签 haskell exception

我只是想知道如果我不想在一些简单的脚本中创建自定义异常,是否可以抛出任何通用异常。

我正在寻找一个以单个 String 作为原因的异常。

作为一个例子,NoMethodError,但是它有一个特定的语义,我想要一个通用的语义。 https://hackage.haskell.org/package/base-4.16.0.0/docs/Control-Exception.html#t:NoMethodError

最佳答案

这取决于您想要做什么。

如果你想抛出 IO 错误,那么你可以调用 error ,生成 ErrorCall异常(exception)。您可以选择在 main 函数中捕获该错误,并生成更加用户友好的错误消息。这大致相当于大多数其他编程语言提供的异常处理方式。

如果您有一些非 IO 计算可能在各个阶段失败(例如,在 Map 中查找某些内容但没有找到它),那么您可以使用 Either String作为一个快速而肮脏的异常单子(monad)。相当于抛出异常的是Left

要使 Either String 更强大,您可以导入 Control.Monad.Except 。这引入了 MonadError 类型类,其中包含 Either 作为实例。因此,通过导入它,您可以使用 throwErrorcatchError

或者您可以使用 ExceptT monad 转换器(也是 Control.Monad.Except 的一部分),为您正在使用的任何其他 monad 添加异常。

关于haskell - 带字符串参数的通用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71125378/

相关文章:

haskell - 使用泛型静态分析类型

haskell - 一种易于进行算术运算且有边界保证的类型

java - 读取文件并将其保存到二维列表java中

java - UnsatisfiedLinkError 无法加载库

exception - 如何在 Oozie 中获取有关已终止作业的更具体的错误信息

haskell - 液体 haskell : "Cyclic type alias definition" error from an inlined recursive function

haskell - 从Haskell列表中删除重复的元素

haskell - 当传递给返回 Just x 的 lambda 时,Haskell 如何知道将 Nothing 保留为空?

java - 第二次加载时进度条失败

java - 不能抛出私有(private)成员类的实例? - java