Я предполагаю, , что это контекст вопроса , поэтому я опубликую комментарий, который я оставил там, на случай, если вы его не заметили:
Если вы часто используете несколько определенных функций, вы можете написать обертку вокруг них, например, liftedPutStr = liftIO . putStr
. Вы можете даже импортировать квалифицированные оригиналы и сделать так, чтобы ваша поднятая версия использовала то же имя, если хотите. Кроме того, группа действий ввода-вывода, которые не вызывают ошибок, может быть извлечена в одну отдельную функцию, которая может быть 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
.