代码之家  ›  专栏  ›  技术社区  ›  Sridhar Ratnakumar

对多个OR值进行错误处理

  •  1
  • Sridhar Ratnakumar  · 技术社区  · 8 年前

    我有两个 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 语句,但我想知道这里是否已经有了可以使用的抽象?

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

    1 回复  |  直到 8 年前
        1
  •  6
  •   gallais    8 年前

    你可以利用以下事实 Either String 是一个 Applicative 对于这样的事情。

    假设

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

    你可以写

    mapp :: Either String App
    mapp = App <$> mcnf <*> menv
    
    推荐文章