我试图在值的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)
而不是const ...在第一个参数中使用,而是either使用其他东西.
either oops .... where
oops x = error $ "Oops! Got an " ++ show x
Run Code Online (Sandbox Code Playgroud)
管他呢.
但请注意,该内容error只应用于内部错误.应该允许用户错误,连接错误等冒泡IO,然后报告throwIO或优雅地处理.