我有一个返回类型ErrorT String IO ()
的函数。虽然该函数有效,liftIO
每行都会执行IO。这让事情变得一团糟。有没有办法解决这个问题,仍然有能力中止错误?
答案 0 :(得分:5)
我假设this is the context of the question,所以如果您没有注意到,我会重新发布我留在那里的评论:
如果你经常使用一些特定的功能,你可以在它们周围写一个包装器,例如: liftedPutStr = liftIO . putStr
。如果您愿意,您甚至可以导入合格的原件并使您的提升版本使用相同的名称。此外,一组不会引发错误的IO操作可以被拉出到一个单独的函数中,然后只能liftIO
一次。这有帮助吗?
如果您不熟悉合格的导入,请再次以putStr
为例:
import Prelude hiding (putStr)
import qualified Prelude as P
import Control.Monad.Trans
putStr x = liftIO $ P.putStr x
这应该允许您在已转换的putStr
中使用已更改的IO
,就像您通常使用普通putStr
中的真实IO
一样。