【发布时间】:2016-10-14 06:04:44
【问题描述】:
我的代码结构类似于下面的示例。我很确定应该有一种方法可以更合理地构建它。我会假设 Either (or Error) monad 可以提供帮助,但我不知道从哪里开始。有什么建议可以让我朝着正确的方向前进吗?
data Data1 = Data1 { d2Id :: String }
data Data2 = Data2 { d3Id :: String }
data Data3 = Data3 { d4Id :: String }
getData1 :: String -> IO (Either String Data1)
getData2 :: String -> IO (Either String Data2)
getData3 :: String -> IO (Either String Data3)
process :: Data1 -> Data2 -> Data3 -> IO ()
get :: String -> IO ()
get id = do
r1 <- getData1 id
case r1 of
Left err -> print err
Right d1 -> do
r2 <- getData2 $ d2Id d1
case r2 of
Left err -> print err
Right d2 -> do
r3 <- getData3 $ d3Id d2
case r3 of
Left err -> print err
Right d3 -> do
process d1 d2 d3
【问题讨论】: