如何在Haskell中出错时提取Either的权利并保留其左边的信息?

tin*_*lyx 0 haskell either

我试图在值的Right构造函数中提取Either值,同时如果Either问题实际上是Left一个错误(即错误)则给出错误.Either Right Left中如何读取值的答案给了我类似的东西:

fromRight e = either (const $ error "Either Left encountered while expecting Right") id e
Run Code Online (Sandbox Code Playgroud)

这有效,但丢弃了Leftctor 的错误消息中的有用信息Either.如何发布有关相关的错误消息Left

- 编辑 -

感谢您的投入.我希望这是一个更具信息性的版本fromJust.

另外,我想避免case每次都写一个语句,并且想要避免Monads,只要它不太复杂(保持函数"eval"风格).对于我的用例,它是面向计算的,只有当提供无效输入之类的东西时才会出现错误(当没有补救措施时).

我最终使用:

fromRight e = either (error.show) id e
Run Code Online (Sandbox Code Playgroud)

dfe*_*uer 5

而不是const ...在第一个参数中使用,而是either使用其他东西.

either oops .... where
  oops x = error $ "Oops! Got an " ++ show x
Run Code Online (Sandbox Code Playgroud)

管他呢.


但请注意,该内容error只应用于内部错误.应该允许用户错误,连接错误等冒泡IO,然后报告throwIO或优雅地处理.