我知道可以更改包装类型,以便您可以拥有
f :: (a -> m b)
g :: (b -> m c)
f >>= g :: (a -> m c)
但有可能改变m
吗?如果m
is a MonadError
and 由 an Either ErrorA
and实现Either ErrorB
,我可以以某种方式链接它们吗?显然我不能直接将它们链接起来,因为 的类型是Left
什么?但是,无论哪种情况,我最终都会打电话show
,但我没有找到比这更好的解决方案
case mightFail1 of
Left e -> show e
Right v -> either show doStuff mightFail2
它无法正确使用在第一个错误处停止的单子行为,而无需我进行明确检查。