我试图在值的Right
构造函数中提取Either
值,同时如果Either
问题实际上是Left
一个错误(即错误)则给出错误.Either Right Left中如何读取值的答案给了我类似的东西:
fromRight e = either (const $ error "Either Left encountered while expecting Right") id e
这有效,但丢弃了Left
ctor 的错误消息中的有用信息Either
.如何发布有关相关的错误消息Left
?
- 编辑 -
感谢您的投入.我希望这是一个更具信息性的版本fromJust
.
另外,我想避免case
每次都写一个语句,并且想要避免Monads,只要它不太复杂(保持函数"eval"风格).对于我的用例,它是面向计算的,只有当提供无效输入之类的东西时才会出现错误(当没有补救措施时).
我最终使用:
fromRight e = either (error.show) id e
dfeuer.. 5
而不是const ...
在第一个参数中使用,而是either
使用其他东西.
either oops .... where oops x = error $ "Oops! Got an " ++ show x
管他呢.
但请注意,该内容error
只应用于内部错误.应该允许用户错误,连接错误等冒泡IO
,然后报告throwIO
或优雅地处理.
而不是const ...
在第一个参数中使用,而是either
使用其他东西.
either oops .... where oops x = error $ "Oops! Got an " ++ show x
管他呢.
但请注意,该内容error
只应用于内部错误.应该允许用户错误,连接错误等冒泡IO
,然后报告throwIO
或优雅地处理.