streamly-bytestring: Library for streamly and bytestring interoperation.

[ bsd3, bytestring, library, stream, streamly ] [ Propose Tags ]

Please see the README on GitHub at

[Skip to Readme]
Versions [RSS] [faq],, 0.1.1, 0.1.2, 0.1.3, 0.1.4 (info)
Change log
Dependencies base (>=4.7 && <5), base-compat (>=0.11), bytestring (>=0.10.0 && <0.11), streamly (>=0.7.0 && <0.8), transformers (>=0.4) [details]
License BSD-3-Clause
Copyright Sibi Prabakaran
Author Sibi Prabakaran
Category Streamly, Stream, ByteString
Home page
Bug tracker
Source repo head: git clone
Uploaded by psibi at 2020-01-27T04:55:28Z
Distributions NixOS:0.1.2, Stackage:0.1.4
Downloads 1694 total (35 in the last 30 days)
Rating 2.5 (votes: 3) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2020-01-27 [all 1 reports]


[Index] [Quick Jump]


Maintainer's Corner

For package maintainers and hackage trustees


Readme for streamly-bytestring-

[back to package description]


Library for streamly and bytestring interoperation.


This package provides Streamly.External.ByteString and Streamly.External.ByteString.Lazy.

Strict ByteString

Streamly.External.ByteString provides functions to for interoperation between streamly and strict bytestring.

fromArray and toArray are used to efficiently convert between streamly's pinned array type (Streamly.Memory.Array) and bytestring.

read, writeN and write are Unfolds & Folds provided by streamly that are used to create and consume a stream of Word8. writeN is more efficient than write and should be preferred over write when possible.

Lazy Bytestring

Streamly.External.ByteString.Lazy provides functions to for interoperation between streamly and lazy bytestring.

readChunks and read are Unfolds. unfold from Streamly.Prelude can be used to create a stream of Array Word8 or a stream of Word8 from a lazy ByteString.

toChunks is defined as unfold readChunks. fromChunks can be used to create a lazy ByteString from a stream of Array Word8 chunks.


This is a dumb program that counts the number of bytes in a file.

import Streamly
import qualified Streamly.Prelude as S

import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BSL

import qualified Streamly.External.ByteString as Strict
import qualified Streamly.External.ByteString.Lazy as Lazy

import System.IO (FilePath)

strictByteStringSize :: BS.ByteString -> IO Int
strictByteStringSize bs = S.length $ S.unfold bs

lazyByteStringSize :: BSL.ByteString -> IO Int
lazyByteStringSize bsl = S.foldl' (+) 0
		       $ S.mapM strictByteStringSize
		       $ Strict.fromArray
		       $ Lazy.toChunks bsl

fileSize :: FilePath -> IO Int
fileSize path = do
    bsl <- BSL.readFile path
    lazyByteStringSize bsl