Я новичок в Haskell и все еще изучаю монадные трансформаторы.
Я пытаюсь использовать библиотеку streaming-bytestring для чтения двоичного файла, обработки кусков байтов и печати результата при обработке каждого кусочка. Я считаю, что это популярная библиотека streaming
, которая предоставляет альтернативу ленивым строкам. Похоже, авторы скопировали документацию lazy bytestring и добавили несколько произвольных примеров.
В примерах упоминается runResourceT
, не обсуждая, что это такое или как его использовать. Похоже, что следует использовать runResourceT
в любой функции потоковой передачи по строке, выполняющей действие. Это нормально, но что, если я читаю бесконечный поток, который обрабатывает куски и печатает их? Должен ли я вызывать runResourceT каждый раз, когда я хочу обработать чанк?
Мой код выглядит примерно так:
import qualified Data.ByteString.Streaming as BSS
import System.TimeIt
main = timeIt $ processByteChunks $ BSS.drop 100 $ BSS.readFile "filename"
и я не уверен, как организовать processByteChunks
как рекурсивную функцию, которая перебирает двоичный файл.
Если бы я позвонил runResourceT
только один раз, он прочитал бы бесконечный файл ПЕРЕД печатью, верно? Это кажется плохим.
main = timeIt $ runResourceT $ processByteChunks $ BSS.drop 100 $ BSS.readFile "filename"