Например, вы можете использовать функцию «loop» и предоставить свой собственный обратный вызов.Этот обратный вызов должен быть действием ввода-вывода, поэтому одним из простых решений будет добавление аргумента пакета в последовательность (см. Data.Sequence), хранящуюся в IORef.Как только вы получили достаточно пакетов, просто прочитайте IOVar.Или вы можете сделать что-то более сложное с потоками и очередями, в зависимости от того, чего вы пытаетесь достичь.