Хаскелл перебил чтение http - PullRequest
1 голос
/ 16 декабря 2009

Вот следующий практический вопрос.

Я хочу загрузить несколько больших файлов с http-сервера (обновления базы данных). Эта операция должна блокировать пользовательский интерфейс, не позволяя ему вводить данные. Так что проблема в том, чтобы показать пользователю индикатор выполнения, который скажет ему, сколько еще ждать.

В python объекты запроса открывают файловый объект. Я прочитал его по патронам и сообщил в GUI с помощью функций обратного вызова.

Как реализовать то же самое в haskell? как узнать текущий загруженный размер и сообщить об этом?

1 Ответ

1 голос
/ 16 декабря 2009

В Haskell вы бы делали это аналогично версии Python, но детали зависят от библиотеки GUI, которую вы используете.

Есть несколько опций, касающихся того, как вы определяете, сколько поступило ввода. Одним из способов является использование ленивых IO. Затем вы обычно получаете в результате строку, которая строится лениво по мере поступления данных. Затем вы можете написать функции ввода-вывода, которые будут проходить по списку и обновлять пользовательский интерфейс по мере его продвижения. Это может быть довольно удобным методом, но ленивый ввод-вывод, как правило, очень хрупкий, поэтому используйте его с осторожностью.

Другой вариант - использовать некоторый интерфейс, который обеспечивает доступ к чанкам по мере их поступления. У меня нет личного опыта работы с такой библиотекой, но библиотека HTTP , кажется, поддерживает это в модуле Base.

Для отслеживания прогресса в библиотеке MissingH есть хороший модуль: Data.Progress.Tracker .

Если вы дадите более подробную информацию о вашем конкретном сценарии, можно будет прокомментировать дальше.

Удачи.

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