带有 String 参数的一般异常

Generic exception with String parameter

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

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

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

这完全取决于你想做什么。

如果你想抛出一个 IO 错误,那么你可以调用 error, which generates an ErrorCall 异常。您可以选择在 main 函数中捕获它并生成更多 user-friendly 错误消息。这大致相当于大多数其他编程语言提供的异常处理方式。

如果您有一些 non-IO 计算可能会在不同阶段失败(例如,在 Map 中查找某些东西但没有找到它),那么您可以使用 Either String 作为 quick-and-dirty 异常monad。抛出异常的等价物是 Left.

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

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