{-# LANGUAGE OverloadedStrings #-} import qualified Data.ByteString.Lazy as L import qualified Codec.Compression.GZip as GZip import Criterion.Main import qualified Data.Conduit as C import qualified Data.Conduit.Binary as CB import qualified Data.Conduit.Zlib as CZ import qualified Data.Enumerator as E import qualified Data.Enumerator.Binary as EB import qualified Codec.Zlib.Enum as EZ import qualified System.IO as SIO import Control.Pipe import qualified Control.Pipe.Binary as PB import qualified Control.Pipe.Zlib as PZ filePath :: FilePath filePath = "bench/sample.gz" tmpFile :: FilePath tmpFile = "dist/build/autogen/bench-tmp" lazyIO :: IO () lazyIO = do compressed <- L.readFile filePath L.writeFile tmpFile $ GZip.decompress compressed conduits1 :: IO () conduits1 = C.runResourceT $ CB.sourceFile filePath C.$$ CZ.ungzip C.=$ CB.sinkFile tmpFile conduits2 :: IO () conduits2 = C.runResourceT $ CB.sourceFile filePath C.$= CZ.ungzip C.$$ CB.sinkFile tmpFile enumerator :: IO () enumerator = SIO.withBinaryFile tmpFile SIO.WriteMode $ \h -> E.run_ $ EB.enumFile filePath E.$$ EZ.ungzip E.=$ EB.iterHandle h pipes :: IO () pipes = runPipe $ PB.fileReader filePath >+> PZ.gunzip >+> PB.fileWriter tmpFile main :: IO () main = defaultMain [ bench "pipes" pipes , bench "conduits1" conduits1 , bench "conduits2" conduits2 , bench "enumerator1" enumerator , bench "lazyIO" lazyIO ]