Как взять ленивую байтовую строку из zip-архива без переполнения кучи

Я хочу взять первые пять байтов из первого файла в zip-архиве. Для распаковки я использую zip-архив:

import qualified Data.ByteString.Lazy as L
import Data.Maybe
import System.Environment (getArgs)

import Codec.Archive.Zip

main = do
    f:_ <- getArgs
    print . L.take 5 . fromEntry . head . zEntries . toArchive =<< L.readFile f

Этот код работает с небольшими архивами, но у меня переполняется куча большими. Например:

./zip-arch test.zip +RTS -p -hy -M100M

для этого архива дает профиль кучи

7
задан tymmym 10 February 2012 в 10:21
поделиться