В Haskell вы бы делали это аналогично версии Python, но детали зависят от библиотеки GUI, которую вы используете.
Есть несколько опций, касающихся того, как вы определяете, сколько поступило ввода. Одним из способов является использование ленивых IO. Затем вы обычно получаете в результате строку, которая строится лениво по мере поступления данных. Затем вы можете написать функции ввода-вывода, которые будут проходить по списку и обновлять пользовательский интерфейс по мере его продвижения. Это может быть довольно удобным методом, но ленивый ввод-вывод, как правило, очень хрупкий, поэтому используйте его с осторожностью.
Другой вариант - использовать некоторый интерфейс, который обеспечивает доступ к чанкам по мере их поступления. У меня нет личного опыта работы с такой библиотекой, но библиотека HTTP , кажется, поддерживает это в модуле Base.
Для отслеживания прогресса в библиотеке MissingH есть хороший модуль: Data.Progress.Tracker .
Если вы дадите более подробную информацию о вашем конкретном сценарии, можно будет прокомментировать дальше.
Удачи.