错误字符串IO()类型的Haskell liftIO litter函数

时间:2010-02-07 06:22:49

标签: haskell io

我有一个返回类型ErrorT String IO ()的函数。虽然该函数有效,liftIO每行都会执行IO。这让事情变得一团糟。有没有办法解决这个问题,仍然有能力中止错误?

1 个答案:

答案 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一样。