bytestring
Fast, compact, strict and lazy byte strings with a list interface
https://github.com/haskell/bytestring
| Version on this page: | 0.12.0.2 | 
| LTS Haskell 24.18: | 0.12.2.0 | 
| Stackage Nightly 2025-11-03: | 0.12.2.0 | 
| Latest on Hackage: | 0.12.2.0@rev:1 | 
bytestring-0.12.0.2@sha256:9fc077ff5b7ed2246773c3ac4370ef8822e4834d4587522b68ae551a5968fb86,7891Module documentation for 0.12.0.2
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 1.10 or greater
 - GHC 8.0 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.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.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