bytestring
Fast, compact, strict and lazy byte strings with a list interface
https://github.com/haskell/bytestring
| Version on this page: | 0.12.2.0 |
| LTS Haskell 24.16: | 0.12.2.0 |
| Stackage Nightly 2025-10-24: | 0.12.2.0 |
| Latest on Hackage: | 0.12.2.0@rev:1 |
bytestring-0.12.2.0@sha256:69a57e6a840714ede26e231fcf0a3cdde1b4f1ba24b3f6a22666aa5c340ad405,9275Module documentation for 0.12.2.0
ByteString: Fast, Packed Strings of Bytes
This library provides the Data.ByteString module – strict and lazy
byte arrays manipulable as strings – providing very time/space-efficient
string and IO operations.
For very large data requirements, or constraints on heap size,
Data.ByteString.Lazy is provided, a lazy list of bytestring chunks.
Efficient processing of multi-gigabyte data can be achieved this way.
The library also provides Data.ByteString.Builder for efficient construction
of ByteString values from smaller pieces during binary serialization.
Requirements:
- Cabal 2.2 or greater
- GHC 8.4 or greater
Authors
ByteString was derived from the GHC PackedString library,
originally written by Bryan O’Sullivan, and then by Simon Marlow.
It was adapted and greatly extended for darcs by David Roundy and
others. Don Stewart and Duncan Coutts cleaned up and further extended
the implementation and added the .Lazy code. Simon Meier contributed
the Builder feature.
Changes
0.12.2.0 — December 2024
- Bug fixes:
- API additions:
- Performance improvements:
- Miscellaneous:
- Remove support for GHC < 8.4
- Various documentation improvements (1, 2)
0.12.1.0 — February 2024
- Provisional support has been added for using
bytestringwith GHC’s JavaScript back-end.- This support is relatively un-tested and un-optimised. There may be bugs! Please report any you discover to
bytestring’s issue tracker. - The JavaScript back-end’s limited support for the Haskell-C foreign function interface would previously result in many operations failing with errors like
ReferenceError: h$fps_count is not defined. - The new
pure-haskellpackage flag allows the new fallback Haskell implementations (used to support the JavaScript backend) to be used on most other platforms as well.
- This support is relatively un-tested and un-optimised. There may be bugs! Please report any you discover to
- Bug fixes:
stimes 0 sbs :: ShortByteStringnow returns the emptyShortByteStringinstead of throwing an exceptionstimes 0 b :: Buildernow returns the emptyBuilderinstead of throwing an exception- Several alignment-related bug fixes
- Fix a bug in
isValidUtf8 sconcat @ShortByteStringis no longer terribly inefficient- Fix the type on the foreign import used for
Data.ByteString.Short.elemIndex - Ensure that the result of
fromShortis protected bymkDeferredByteString
- Behavior changes:
- The
Data.Data.Datainstances forStrictByteStringandLazyByteStringhave been changed:toConstrnow returns the apackpseudo-constructor instead of throwing an exception.- Due to this pseudo-constructor,
gunfoldcan now be meaningfully used at these types. (Previously, it would always raise an exception.) - These changes allow
syb:Data.Generics.Text.gshowto be meaningfully used at types containingByteStrings.
- A derived
instance Generic ShortByteStringhas been added. sconcat @Builderis now lazy in the tail of its input
- The
- Deprecations:
- Performance improvements:
- Various raw-binary
Builderprimitives likeintHostorword32BEare much less inefficient on architectures not known to support unaligned writes. (1, 2) - Hexadecimal encoding suffers one indirection fewer
Data.ByteString.Lazy.takeEndis somewhat fasterData.ByteString.Lazy.dropEndis much faster
- Various raw-binary
- Miscellaneous:
- Various documentation improvements (1, 2, 3, 4, 5)
- Eta-expand
Data.ByteString.Builder.Internal.empty- This can variously help or hurt performance; it undoes the performance changes caused by CLC proposal 132 with ghc-9.8 and restores the baseline performance seen with older GHCs.
0.12.0.2 — August 2023
0.12.0.1 — August 2023
0.12.0.0 — July 2023
- Breaking Changes:
readIntreturnsNothing, if the sequence of digits cannot be represented by anInt, instead of overflowing silently- Remove
zipWithrewrite rule ShortByteStringis now a wrapper aroundData.Array.Byte.ByteArrayinstead ofByteArray#directly- As a compatibility measure,
SBSremains available as a pattern synonym. - The compatibility package
data-array-byteis used whenbasedoes not provideData.Array.Byte.
- As a compatibility measure,
fromListNfrominstance IsList ShortByteStringnow throws an exception if the first argument does not match the length of the second- Previously, it would ignore the first argument entirely.
- Bug fixes:
- Size-related calculations are more resistant to
Intoverflow in the following places:
- Size-related calculations are more resistant to
- API additions:
- Deprecations:
Data.ByteString.getLine: preferData.ByteString.Char8.getLineData.ByteString.hGetLine: preferData.ByteString.Char8.hGetLine
0.11.5.3 — October 2023
- Bug fixes:
0.11.5.2 — August 2023
0.11.5.1 — August 2023
0.11.5.0 — July 2023
- Bug fixes:
- API additions:
- Deprecations:
Data.ByteString.Internal.memcpy: preferForeign.Marshal.Utils.copyBytesData.ByteString.Internal.memset: preferForeign.Marshal.Utils.fillBytes
- Performance improvements:
- Miscellaneous:
0.11.4.0 — January 2023
- Bug fixes:
- API additions and behavior changes:
- Performance improvements:
- Miscellaneous:
0.11.3.1 — May 2022
- Windows: Do not link against
gcc_s - Windows: Do not link against
gccwhen GHC >= 9.4 - Refine CPP for obsolete versions of
gcc
0.11.3.0 — February 2022
Erratum: unsafeIndex was accidentally removed from the export list of Data.ByteString.Short.Internal in this release. This was corrected in 0.11.4.0.
- Enhance
ShortByteStringAPI- Add
all,any,append,break,breakEnd,breakSubstring,concat,cons,count,drop,dropEnd,dropWhile,dropWhileEnd,elem,elemIndex,elemIndices,filter,find,findIndex,findIndices,foldl',foldl,foldl1',foldl1,foldr',foldr,foldr1',foldr1,head,init,intercalate,isInfixOf,isPrefixOf,isSuffixOf,last,map,partition,replicate,reverse,singleton,snoc,span,spanEnd,split,splitAt,splitWith,stripPrefix,stripSuffix,tail,take,takeEnd,takeWhile,takeWhileEnd,uncons,unfoldr,unfoldrN,unsnoctoData.ByteString.Short.
- Add
- Add
Data.ByteString.Short.isValidUtf8 - Use safe
isValidUtf8for large inputs - Make
unlineslazier - Improve performance of
unlines - Make
singletonreturn a slice of a static buffer - Improve performance of
intercalate
0.11.2.0 — December 2021
- Add
Data.ByteString.isValidUtf8 - Speed up
floatDecanddoubleDecusing the Ryu algorithmData.ByteString.Builder.RealFloatoffers additional custom formatters for floating point numbers.
- Add
StrictByteStringandLazyByteStringtype aliases - Add
foldr',foldr1',scanl1,scanr,scanr1toData.ByteString.Lazy{,.Char8} - Add
takeEnd,dropEnd,takeWhileEnd,dropWhileEnd,spanEnd,breakEndtoData.ByteString.Lazy{,.Char8} - Add
Data.ByteString.Builder.writeFileto writeBuilderto file directly - Add
Data.ByteString.{from,to}FilePathfor encoding-aware conversions - Add
Liftinstances for all flavors ofByteString - Add
HasCallStackfor partial functions - Define
foldl,foldl',foldr,foldr',mapAccumL,mapAccumR,scanl,scanrandfilterwith one argument less to allow more inlining - Speed up internal loop in
unfoldrN - Speed up
countwith SSE and AVX instructions - Improve performance of certain
Builders by using a static table for Base16 - Use
unsafeWithForeignPtrwhenever possible - Remove
integer-simpleflag - Remove misleading mentions of fusion
0.11.1.0 — February 2021
- Add
Data.ByteString.Char8.findIndexEndandData.ByteString.Lazy.Char8.{elemIndexEnd,findIndexEnd,unzip} - Expose
ShortByteStringconstructor fromData.ByteString.Short - Add
compareLengthfunction, which is lazier than comparison of lengths - Add strict
takeEndanddropEnd - Expose
packZipWithto zip twoByteString - Add
instance Show Builder - Improve lazy
packto carry fewer arguments in the inner loop - Improve
map,findIndexandfindIndexEndto carry fewer arguments in the inner loop - Improve lazy
{take,drop}While,breakandgroup{,By}to carry fewer arguments in the inner loop - Speed up
intersperseusing SSE2 instructions fromShortdoes not reallocate its argument, if it is pinned- Speed up
wordsusing a faster test for spaces - Implement
stimesmore efficiently than default definition
0.10.12.1 – January 2021
0.11.0.0 — September 2020
- Change internal representation of
ByteString, removing offset- The old
PSconstructor has been turned into a pattern synonym that is available with GHC >= 8.0 for backwards compatibility. Consider addingif !impl(ghc >=8.0) { build-depends: bytestring < 0.11 }to packages, which usePSand still support GHC < 8.0.
- The old
- Fill
ForeignPtrContentsofnullForeignPtrwithFinalPtrinstead of a bottom - Remove deprecated functions
findSubstringandfindSubstrings - Speed up sorting of short strings
- Improve handling of literal strings in
Data.ByteString.Builder - Compute length at compile time for literal strings
- This improves optimization opportunities for functions that scrutinize the length of a
ByteString.
- This improves optimization opportunities for functions that scrutinize the length of a
- Add
indexMaybeand synonym(!?)for indexing that returnsMaybe - Add rewrite rules for
{take,drop}While ({=,/}= x) - Add rewrite rules for
any (== x)andall (/= x) - Add rewrite rules for
findInd{ex,ices} (== x) - Improve folds to pass fewer arguments on each recursive invocation
- Improve performance of
findIndices - Re-export
Data.ByteString.Lazy.{from,to}StrictfromData.ByteString - Remove deprecated modules and functions
- Use
Data.ByteString.Builder{,.Extra}instead ofData.ByteString.Lazy.Builder{,.ASCII,.Extras}. - Use
Data.ByteString.Char8.{,h}putStrLninstead ofData.ByteString.{,h}putStrLnandData.ByteString.Lazy.Char8.putStrLninstead ofData.ByteString.Char8.putStrLn. - Use
Data.ByteString.break (== x)instead ofData.ByteString.breakByte x. - Use
Data.ByteString.Internal.accursedUnutterablePerformIOinstead ofData.ByteString.Internal.inlinePerformIO.
- Use
0.10.12.0 – August 2020
- Note: There are several breaking changes planned to be included in v0.11. Please ensure that your packages have appropriate upper bounds on bytestring, in order to minimize avoidable breakage.
- Add
takeWhileEndanddropWhileEndtoData.ByteStringandData.ByteString.Char8, and adddropSpaceandstriptoData.ByteString.Char8 - Add
findIndexEndtoData.ByteStringandData.ByteString.Lazy - Add
partitiontoData.ByteString.Char8andData.ByteString.Lazy.Char8 - Add
IsListinstances for strict and lazyByteStringand forShortByteString - Add
createUptoN'andunsafeCreateUptoN'toData.ByteString.Internal - Add
boundedPrimtoData.ByteString.Builder.Prim.Internaland deprecateboudedPrim - Deprecate the
Data.ByteString.Lazy.BuilderandData.ByteString.Lazy.Builder.{ASCII,Extras}modules - Fix documented complexity of
Data.ByteString.Lazy.length - Assorted documentation fixes
0.10.10.1 – June 2020
- Fix off-by-one infinite loop in primMapByteStringBounded (#203)
- Don’t perform unaligned writes when it isn’t known to be safe (#133)
- Improve the performance of sconcat for lazy and strict bytestrings (#142)
- Document inadvertent 0.10.6.0 behaviour change in findSubstrings
- Fix benchmark builds (#52)
- Documentation fixes
- Test fixes
0.10.10.0 July 2019 [email protected] July 2019
- Build with GHC 8.8, and tests with QC 2.10+
- Add conversions between ShortByteString and CString (#126)
- Documentation fixes (#65, #118, #144, #150, #152, #172)
- Resolve potential copyright issue with test data (#165)
0.10.8.2 Duncan Coutts [email protected] Feb 2017
- Make readFile work for files with no size like /dev/null
- Extend the cases in which concat and toStrict can avoid copying data
- Fix building with ghc-7.0
- Minor documentation improvements
- Internal code cleanups
0.10.8.1 Duncan Coutts [email protected] May 2016
- Fix Builder output on big-endian architectures
- Fix building with ghc-7.6 and older
0.10.8.0 Duncan Coutts [email protected] May 2016
- Use Rabin-Karp substring search for
breakSubstringandfindSubstring - Improve the performance of
partitionfor lazy and strict bytestrings - Added
stripPrefixandstripSuffixfor lazy and strict bytestrings - Fix building with ghc 8.0 & base 4.9 (Semigroup etc)
0.10.6.0 Duncan Coutts [email protected] Mar 2015
- Rename inlinePerformIO so people don’t misuse it
- Fix a corner case in unfoldrN
- Export isSuffixOf from D.B.Lazy.Char8
- Add D.B.Lazy.elemIndexEnd
- Fix readFile for files with incorrectly reported file size
- Fix for builder performance with ghc 7.10
- Fix building with ghc 6.12
0.10.4.1 Duncan Coutts [email protected] Nov 2014
- Fix integer overflow in concatenation functions
- Fix strictness of lazy bytestring foldl’
- Numerous minor documentation fixes
- Various testsuite improvements