zlib-yaftee: Zlib wrapper built on Yaftee

[ bsd3, codec, library ] [ Propose Tags ] [ Report a vulnerability ]

Modules

  • Control
    • Monad
      • Yaftee
        • Pipe
          • Control.Monad.Yaftee.Pipe.Zlib

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0
Change log CHANGELOG.md
Dependencies base (>=4.7 && <5), bytestring (>=0.12 && <0.13), bytestring-ft (>=0.1 && <0.2), higher-order-open-union (>=0.1 && <0.2), primitive (>=0.9 && <0.10), tools-yj (>=0.1 && <0.2), yaftee (>=0.1 && <0.2), yaftee-basic-monads (>=0.1 && <0.2), yaftee-conduit (>=0.1 && <0.2), zlib-core (>=0.1 && <0.2) [details]
License BSD-3-Clause
Copyright (c) 2025 Yoshikuni Jujo
Author Yoshikuni Jujo
Maintainer yoshikuni.jujo@gmail.com
Category Codec
Home page https://github.com/YoshikuniJujo/zlib-yaftee#readme
Bug tracker https://github.com/YoshikuniJujo/zlib-yaftee/issues
Source repo head: git clone https://github.com/YoshikuniJujo/zlib-yaftee
Uploaded by YoshikuniJujo at 2025-11-19T03:15:44Z
Distributions
Downloads 0 total (0 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2025-11-19 [all 2 reports]

Readme for zlib-yaftee-0.1.0.0

[back to package description]

zlib-yaftee

sample1

{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE DataKinds #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Main (main) where

import Control.Monad
import Control.Monad.Yaftee.Eff qualified as Eff
import Control.Monad.Yaftee.Pipe qualified as Pp
import Control.Monad.Yaftee.Pipe.Tools qualified as PpT
import Control.Monad.Yaftee.Pipe.IO qualified as PpIO
import Control.Monad.Yaftee.Pipe.ByteString qualified as PpBS
import Control.Monad.Yaftee.Pipe.Zlib qualified as Z
import Control.Monad.Yaftee.Except qualified as Except
import Control.Monad.Yaftee.IO qualified as IO
import Data.ByteString.FingerTree qualified as BSF
import System.IO
import System.Environment
import Codec.Compression.Zlib.Constant.Core qualified as Z
import Codec.Compression.Zlib.Advanced.Core qualified as Z

readBufSize :: Int
readBufSize = 64 * 5

inputBufSize, outputBufSize :: Int
inputBufSize = 64 * 4
outputBufSize = 64

main :: IO ()
main = do
	fp : _ <- getArgs; h <- openFile fp ReadMode
	(i, o) <- (,)
		<$> Z.cByteArrayMalloc inputBufSize
		<*> Z.cByteArrayMalloc outputBufSize

	void . Eff.runM . Except.run @Z.ReturnCode . Z.run @"" . Pp.run
		. (`Except.catch` IO.print @Z.ReturnCode) . void
		$ PpBS.hGet readBufSize h Pp.=$=
			PpT.convert BSF.fromStrict Pp.=$=
			Z.inflate "" IO (Z.WindowBitsZlibAndGzip 15) i o Pp.=$=
			PpIO.print

	Z.cByteArrayFree i; Z.cByteArrayFree o; hClose h

sample2

{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE ScopedTypeVariables, TypeApplications #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Main (main) where

import Control.Monad.Primitive
import Control.Monad.ST
import Control.Monad.Yaftee.Eff qualified as Eff
import Control.Monad.Yaftee.Pipe qualified as Pp
import Control.Monad.Yaftee.Pipe.Tools qualified as PpT
import Control.Monad.Yaftee.Pipe.ByteString qualified as PpBS
import Control.Monad.Yaftee.Pipe.Zlib qualified as Z
import Control.Monad.Yaftee.Except qualified as Except
import Data.ByteString qualified as BS
import Data.ByteString.FingerTree qualified as BSF
import System.Environment
import Codec.Compression.Zlib.Constant.Core qualified as Z
import Codec.Compression.Zlib.Advanced.Core qualified as Z

readBufSize :: Int
readBufSize = 64 * 5

inputBufSize, outputBufSize :: Int
inputBufSize = 64 * 4
outputBufSize = 64

main :: IO ()
main = do
	fp : _ <- getArgs; cnt <- BS.readFile fp
	either print BS.putStr $ runST $ inflate cnt

inflate :: forall m . PrimBase m =>
	BS.ByteString -> m (Either Z.ReturnCode BS.ByteString)
inflate s = do
	(i, o) <- (,)	<$> Z.cByteArrayMalloc inputBufSize
			<*> Z.cByteArrayMalloc outputBufSize
	r <- Eff.runM . Except.run @Z.ReturnCode . Z.run @"" . PpBS.to
		$ PpBS.from readBufSize s Pp.=$=
			PpT.convert BSF.fromStrict Pp.=$=
			Z.inflate "" m (Z.WindowBitsZlibAndGzip 15) i o Pp.=$=
			PpT.convert BSF.toStrict
	r <$ (Z.cByteArrayFree i >> Z.cByteArrayFree o)

sample3

{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE DataKinds #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Main (main) where

import Control.Monad
import Control.Monad.Yaftee.Eff qualified as Eff
import Control.Monad.Yaftee.Pipe qualified as Pp
import Control.Monad.Yaftee.Pipe.Tools qualified as PpT
import Control.Monad.Yaftee.Pipe.IO qualified as PpIO
import Control.Monad.Yaftee.Pipe.ByteString qualified as PpBS
import Control.Monad.Yaftee.Pipe.Zlib qualified as PpZ
import Control.Monad.Yaftee.Except qualified as Ex
import Control.Monad.Yaftee.IO qualified as IO
import Data.ByteString.FingerTree qualified as BSF
import System.IO
import System.Environment
import Codec.Compression.Zlib.Constant.Core qualified as Z
import Codec.Compression.Zlib.Advanced.Core qualified as Z

main :: IO ()
main = do
	fp : as <- getArgs; h <- openFile fp ReadMode
	let	opt = case as of
			[] -> options $ Z.WindowBitsRaw 15
			["zlib"] -> options $ Z.WindowBitsZlib 15
			["gzip"] -> options $ Z.WindowBitsGzip 15
			_ -> error "bad arguments"
	ib <- PpZ.cByteArrayMalloc 64; ob <- PpZ.cByteArrayMalloc 64
	_ <- Eff.runM . Ex.run @Z.ReturnCode . PpZ.run @"" . Pp.run
		. (`Ex.catch` IO.print @Z.ReturnCode) . void $ PpBS.hGet 32 h
			Pp.=$= PpT.convert BSF.fromStrict
			Pp.=$= PpZ.deflate "" IO opt ib ob
			Pp.=$= PpIO.print
	PpZ.cByteArrayFree ib; PpZ.cByteArrayFree ob; hClose h

options :: Z.WindowBits -> PpZ.DeflateOptions
options wb = PpZ.DeflateOptions {
	PpZ.deflateOptionsCompressionLevel = Z.DefaultCompression,
	PpZ.deflateOptionsCompressionMethod = Z.Deflated,
	PpZ.deflateOptionsWindowBits = wb,
	PpZ.deflateOptionsMemLevel = Z.MemLevel 8,
	PpZ.deflateOptionsCompressionStrategy = Z.DefaultStrategy }