Stream data from zip archives using the Haskell streamly library.
This library was created because libarchive (which streamly-archive relies on) does not seem to have support for jumping to specific files even when the format supports it.
Install libzip on your system.
- Debian Linux:
sudo apt-get install libzip-dev
. - macOS:
brew install libzip
.
module Main where
import qualified Data.ByteString as B
import Data.Function
import qualified Streamly.Data.Fold as F
import qualified Streamly.Data.Stream.Prelude as S
import Streamly.External.Zip
main :: IO ()
main = do
-- Obtain an archive.
z <- openZip "/path/to/archive.zip" []
-- Output a particular file to stdout.
S.unfold unfoldFileAtPath (z, [], "file.txt")
& S.mapM B.putStr
& S.fold F.drain