如果 Haskell 中出现错误,如何提取 Either's Right 并保留有关其 Left 的信息?

How to extract a Either's Right and keep information about its Left in case of error in Haskell?

我正在尝试提取 Either 值的 Right 构造函数中的值,同时如果所讨论的 Either 实际上是 Left 则给出错误(即错误)。 Either Right Left how to read value 中的答案是这样的:

fromRight e = either (const $ error "Either Left encountered while expecting Right") id e

这有效,但丢弃了 EitherLeft 构造函数的错误消息中的有用信息。我怎样才能 post 一条关于 Left 的错误消息呢?

-- 编辑--

感谢您的投入。我想要这个作为 fromJust.

的更多信息版本

此外,我想避免每次都写 case 语句,并希望在不太复杂的情况下避免使用 Monads(以保持函数 "eval" 风格)。对于我的用例,它是面向计算的,只有在提供无效输入之类的东西时(没有补救措施时)才会发生错误。

我最终使用了:

fromRight e = either (error.show) id e

不要在 either 的第一个参数中使用 const ...,而是使用其他参数。

either oops .... where
  oops x = error $ "Oops! Got an " ++ show x

或者随便什么。


但是请注意,error 应该只用于 内部 错误。应该允许用户错误、连接错误等冒泡到 IO,然后用 throwIO 报告或妥善处理。

而不是

const $ error "Left encountered"

您可以使用 lambda 获取值并使用它,例如

\v -> error $ "Left encountered: " ++ v