我有一个返回类型ErrorT String IO ()
的函数。在该功能正常工作时,liftIO
会执行IO的每一行都乱七八糟。一团糟。有什么办法可以解决这个问题,并且仍然能够因错误中止?
最佳答案
我假设this is the context of the question,所以我会重新发布我在那儿留下的评论,以防万一您没有注意到它:
如果您经常使用一些特定功能,则可以在它们周围编写包装器,例如liftedPutStr = liftIO . putStr
。如果需要,您甚至可以导入合格的原件,并让您的提升版本使用相同的名称。同样,可以将一组不会引发错误的IO动作拉出到一个单独的函数中,然后只需liftIO
d次即可。有帮助吗?
如果您不熟悉合格的导入,请再次以putStr
为例:
import Prelude hiding (putStr)
import qualified Prelude as P
import Control.Monad.Trans
putStr x = liftIO $ P.putStr x
这样一来,您就可以像平常在
putStr
中使用真实的IO
一样,在转换后的putStr
中使用更改后的IO
。