Функции помета Лифтио в Haskell типа ErrorT String IO () - PullRequest
4 голосов
/ 07 февраля 2010

У меня есть функция, которая возвращает тип ErrorT String IO (). Пока функция работает, liftIO засоряет каждую строку, которая выполняет IO. Это делает для беспорядка. Есть ли способ обойти это и при этом иметь возможность прервать работу при ошибке?

1 Ответ

5 голосов
/ 07 февраля 2010

Я предполагаю, , что это контекст вопроса , поэтому я опубликую комментарий, который я оставил там, на случай, если вы его не заметили:

Если вы часто используете несколько определенных функций, вы можете написать обертку вокруг них, например, 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...