如何在没有嵌套 case 语句的情况下表达以下内容?具体来说,我想按顺序执行这些步骤,如果任何步骤遇到“坏”分支,则调用失败。
loadData :: IO [Market]
loadData = do
filedata <- B.readFile "markets.json"
case parseData filedata of
Left err -> fail err
Right v -> do
case fromJSON v of
Error err -> fail err
Success a -> return a
最佳答案
如果 parseData
和 fromJSON
都将 Either Err a
作为其共域,其中 Err
是固定类型(也许由您定义),那么您可以使用 Either e
monad 实例,如下所示:
loadData :: IO (Either Err [Market])
loadData = do
filedata <- B.readFile "markets.json"
return $ parseData filedata >>= fromJSON
或者,如果您想要更加圆滑,您可以使用特定的 monad transformer做同样的事情。
关于haskell - 我怎样才能避免这些案例陈述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26746253/