【发布时间】:2019-01-31 15:14:51
【问题描述】:
试图了解用于处理IO 内部可能出现的故障的模式。如果它只有一个 cases 如下所示,它可能是可以接受的,但如果对一堆嵌套的 IO (Either String Int)s 进行嵌套,是否存在处理此类类型的通用模式。例如,如果functionDoSomething 中的b 又是(Either a b),则获取成功的价值并再次对其进行操作将是另一个case。我可以使用更高阶的函数吗?我对 monad 转换器还不满意,不确定它们是否可以用来处理这个特定的 monad 堆栈。如果它们可以在这里使用,有没有办法不使用它们。
import Control.Monad
functionCreate :: Int -> IO (Either String Int)
functionDoSomething :: Int -> IO b
functionUse :: IO ()
functionUse = do
created <- functionCreate 10
case created of
(Right v) -> void $ functionDoSomething v
_ -> return ()
【问题讨论】: