3
我的代碼結構如下例所示。我很確定應該有一種方法來更安全地構建它。我會假設無論是(或錯誤)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
爲什麼這個問題關閉? – Michael
它被標記爲dup。這種問題之前已經出現過,但不完全在這種情況下,所以我決定重新打開它並添加一個答案。 – ErikR