2017-12-27 146 views
1

我有两个either值,例如:错误处理多个要么值

Either String Config -- error string or config parsed 
Either String Env  -- error string or environment variables detected 

而且我想他们的价值观提取到这个纪录:

type App = App { config :: Config, env :: Env } 

而失败快,如果有是错误(其中一个值为Left)。

我可以使用两个case语句,但我想知道是否已经有一个我可以在此使用的抽象了?

理想情况下,我会在出现错误时记录消息并立即退出程序。

回答

6

对于这样的事情,您可以使用Either StringApplicative的事实。

假设

mcnf :: Either String Config 
menv :: Either String Env 

你可以写

mapp :: Either String App 
mapp = App <$> mcnf <*> menv 
+1

感谢。另外我用'System.Exit.die'来处理错误:https://github.com/srid/slownews/commit/a80134c4d918e8b258ae3f1115a62c99ae9b601f –

+0

听起来很对! – gallais