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.17: | 0.12.2.0 | 
| Stackage Nightly 2025-10-31: | 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 empty- ShortByteStringinstead of throwing an exception
- stimes 0 b :: Buildernow returns the empty- Builderinstead 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 a- packpseudo-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 faster
- Data.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:
- readIntreturns- Nothing, if the sequence of digits cannot be represented by an- Int, instead of overflowing silently
- Remove zipWithrewrite rule
- ShortByteStringis now a wrapper around- Data.Array.Byte.ByteArrayinstead of- ByteArray#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, 
- fromListNfrom- instance 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: prefer- Data.ByteString.Char8.getLine
- Data.ByteString.hGetLine: prefer- Data.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: prefer- Foreign.Marshal.Utils.copyBytes
- Data.ByteString.Internal.memset: prefer- Foreign.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 algorithm- Data.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
