{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":8224278,"defaultBranch":"master","name":"bytestring","ownerLogin":"haskell","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2013-02-15T19:06:34.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/450574?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1708054146.0","currentOid":""},"activityList":{"items":[{"before":"3f9773d03979379a64a392cae3f98f2d0718ca78","after":"c967aca1fcc0300f8cc62071533fadb429814763","ref":"refs/heads/master","pushedAt":"2024-09-19T19:38:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Bodigrim","name":"ˌbodʲɪˈɡrʲim","path":"/Bodigrim","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2293557?s=80&v=4"},"commit":{"message":"Improve documentation of customStrategy (#692)\n\n* Clarify documentation of 'customStrategy' based on #690\r\n\r\n* Remove outdated comments on AllocationStrategy\r\n\r\n(These were not visible in the Haddock output anyway.)","shortMessageHtmlLink":"Improve documentation of customStrategy (#692)"}},{"before":"378d4c36dd9c24a9dc8d6facd5e1ec9b79ce0b23","after":"3f9773d03979379a64a392cae3f98f2d0718ca78","ref":"refs/heads/master","pushedAt":"2024-09-19T18:32:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Bodigrim","name":"ˌbodʲɪˈɡrʲim","path":"/Bodigrim","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2293557?s=80&v=4"},"commit":{"message":"CI: add WASM job (#656)\n\n* Don't build tests with threaded runtime on WASM\r\n\r\n* Skip lifting tests on WASM\r\n\r\n* Tests: improve reporting of mismatches for IO tests\r\n\r\n* Add WASM CI job\r\n\r\n* CI: upgrade incantations for emualted tests","shortMessageHtmlLink":"CI: add WASM job (#656)"}},{"before":"594966bbfa84255adfb644d43212e5e05f73c235","after":"378d4c36dd9c24a9dc8d6facd5e1ec9b79ce0b23","ref":"refs/heads/master","pushedAt":"2024-09-18T03:07:32.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Builder: avoid unsound buffer reuse (#690) (#691)\n\n`toLazyByteString :: Builder -> LazyByteString` had a race condition that could\r\ngenerate wrong results if two threads concurrently evaluated the result. This\r\nbug was introduced in #581 (5c4d23670e32967ad615699b5262e9cba4daccb7) and first\r\npresent in release 0.11.5.0 (as 0c030bb63999117a6b1cb1275245a156313c0e49).\r\n\r\nDue to the use of `unsafeDupablePerformIO` for performance, it is critical that\r\nany IO actions executed when running a `Builder` can be interrupted or executed\r\nmultiple times. In principle, filling a buffer is safe provided the buffer is\r\nused only once and the same bytes are written each time. However, `wrapChunk` in\r\n`buildStepToCIOS` would re-use a buffer in the trimming case after copying its\r\ncontents to produce a new trimmed chunk. This is safe when run in a single\r\nthread, but if two threads simultaneously execute the code, one of them may\r\nstill be copying the contents while the other starts overwriting the buffer.\r\n\r\nThis patch fixes `wrapChunk` to unconditionally allocate a new buffer after\r\ntrimming, rather than re-using the old buffer. This will presumably come at a\r\nslight performance cost for builders inserting many trimmed chunks.","shortMessageHtmlLink":"Builder: avoid unsound buffer reuse (#690) (#691)"}},{"before":"4a41f7f0be37d6de56160eb6a0ca7d8f97271799","after":"594966bbfa84255adfb644d43212e5e05f73c235","ref":"refs/heads/master","pushedAt":"2024-07-20T09:35:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Bodigrim","name":"ˌbodʲɪˈɡrʲim","path":"/Bodigrim","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2293557?s=80&v=4"},"commit":{"message":"Remove CentOS from CI (#686)\n\n* use vaulted centos packages\r\n\r\n* removed centos 7 from ci","shortMessageHtmlLink":"Remove CentOS from CI (#686)"}},{"before":"0e0526b6e8453be80d52a5981020e662166933b2","after":"4a41f7f0be37d6de56160eb6a0ca7d8f97271799","ref":"refs/heads/master","pushedAt":"2024-07-18T19:18:12.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Bodigrim","name":"ˌbodʲɪˈɡrʲim","path":"/Bodigrim","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2293557?s=80&v=4"},"commit":{"message":"Fix several bugs around the 'byteString' family of Builders (#671)\n\n* Fix several bugs around the 'byteString' family of Builders\r\n\r\n* Add Note [byteStringCopyStep and wrappedBytesCopyStep]\r\n\r\nThis makes explicit the reasoning for in what sense\r\n\"ensur[ing] that the common case is not recursive\" is expected to\r\npossibly \"yield[] better code.\"","shortMessageHtmlLink":"Fix several bugs around the 'byteString' family of Builders (#671)"}},{"before":"d1aebfb6d1a59fab75a28f85fc219b3399e60c6d","after":"0e0526b6e8453be80d52a5981020e662166933b2","ref":"refs/heads/master","pushedAt":"2024-06-26T18:07:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Remove `includes` from `.cabal`-file (#685)\n\nThis is useless at best, and a common source of confusion.\r\n\r\nhttps://github.com/haskell/cabal/pull/10145\r\nhttps://github.com/sol/hpack/issues/355","shortMessageHtmlLink":"Remove includes from .cabal-file (#685)"}},{"before":"595847e02221bd09568bd8eb9d7811cea19f406f","after":"d1aebfb6d1a59fab75a28f85fc219b3399e60c6d","ref":"refs/heads/master","pushedAt":"2024-06-20T20:48:50.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Bodigrim","name":"ˌbodʲɪˈɡrʲim","path":"/Bodigrim","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2293557?s=80&v=4"},"commit":{"message":"instance IsList Builder (#672)","shortMessageHtmlLink":"instance IsList Builder (#672)"}},{"before":"0816ae5274c524e16efa7b49f399136ec55eb8cd","after":"595847e02221bd09568bd8eb9d7811cea19f406f","ref":"refs/heads/master","pushedAt":"2024-06-20T00:42:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Fix docs for {D.B,D.B.Lazy}.{spanEnd,breakEnd} (#683)","shortMessageHtmlLink":"Fix docs for {D.B,D.B.Lazy}.{spanEnd,breakEnd} (#683)"}},{"before":"c4db494b716c2f7a8a64d4f581c7992ba7911751","after":"0816ae5274c524e16efa7b49f399136ec55eb8cd","ref":"refs/heads/master","pushedAt":"2024-06-16T15:32:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Remove support for ghc < 8.4 (#682)\n\nAlong the way:\r\n\r\n * Obseleted CPP and compatibility workarounds were removed\r\n * Most remaining CPP conditions are moved into\r\n bytestring-cpp-macros.h and given specific feature names\r\n * Most imports from ghc-prim are replaced with equivalent\r\n imports from base\r\n * Data.ByteString.Builder.RealFloat.Internal is left untouched,\r\n to avoid unnecessary conflicts","shortMessageHtmlLink":"Remove support for ghc < 8.4 (#682)"}},{"before":"a41622fd69f3787ffe2da797844948a2a44f831d","after":"c4db494b716c2f7a8a64d4f581c7992ba7911751","ref":"refs/heads/master","pushedAt":"2024-06-05T20:46:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Bump FreeBSD version in .cirrus.yml (#681)\n\n...with the hope of un-breaking CI","shortMessageHtmlLink":"Bump FreeBSD version in .cirrus.yml (#681)"}},{"before":"46a3aeb179c26d2385f95ba518eaa5464c94ceaa","after":"a41622fd69f3787ffe2da797844948a2a44f831d","ref":"refs/heads/master","pushedAt":"2024-06-05T20:24:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Improve benchmarks for small Builders (#680)\n\n* Improve benchmarks for small Builders\r\n\r\n * Do not measure the overhead of allocating destination chunks\r\n * Add several more benchmarks for P.cstring and P.cstringUtf8\r\n\r\n* More benchmark fiddling\r\n\r\n* Update \"since\" markers for new NFData instances","shortMessageHtmlLink":"Improve benchmarks for small Builders (#680)"}},{"before":"793bccce629a86e13dc45461505e68e8b1b686c4","after":"46a3aeb179c26d2385f95ba518eaa5464c94ceaa","ref":"refs/heads/master","pushedAt":"2024-04-09T23:23:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Bump actions/checkout to v4 in CI (#670)\n\n* Bump actions/checkout to v4 in CI\r\n\r\n* Keep old actions/checkout versions in containerized jobs","shortMessageHtmlLink":"Bump actions/checkout to v4 in CI (#670)"}},{"before":"259a0c2de2367d806caf0d389e447a28fc02b05e","after":"793bccce629a86e13dc45461505e68e8b1b686c4","ref":"refs/heads/master","pushedAt":"2024-04-09T22:02:44.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Use default-extensions to tidy up a bit (#669)\n\n* Use default-extensions to tidy up a bit\r\n\r\n* Fix ghc invocation in emulated CI jobs\r\n\r\n* Use Haskell2010 in emulated jobs, too","shortMessageHtmlLink":"Use default-extensions to tidy up a bit (#669)"}},{"before":"4941d9914af73ca405d423ecad076e5e21936302","after":"259a0c2de2367d806caf0d389e447a28fc02b05e","ref":"refs/heads/master","pushedAt":"2024-04-09T20:59:36.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Make D.B.Lazy.zipWith properly lazy (#668)\n\n* Make D.B.Lazy.zipWith properly lazy\r\n\r\nAs a bonus, the new code is easier to read and doesn't trigger\r\na spurious incomplete-pattern-match warning. (Or finding the\r\nbug can be seen as a bonus for cleaning up that messy code.)\r\n\r\nFixes #667.\r\n\r\n* Lazy.zipWith: evaluate the 'unsafeHead' calls eagerly","shortMessageHtmlLink":"Make D.B.Lazy.zipWith properly lazy (#668)"}},{"before":"314e2574984def361b0128aeae690241cd8bc820","after":"4941d9914af73ca405d423ecad076e5e21936302","ref":"refs/heads/master","pushedAt":"2024-04-09T20:59:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Remove another dead branch from toStrict (#663)\n\nLooking at a test coverage report brought it to my attention.","shortMessageHtmlLink":"Remove another dead branch from toStrict (#663)"}},{"before":"00276417e47819f076707d08063608aa18f896b3","after":"453c1dc110720a366f90ef84dc2d75a5cd8c28e0","ref":"refs/heads/bytestring-0.12","pushedAt":"2024-02-15T21:11:37.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Remove Changelog section for far-off unreleased 0.13\n\nThis section should not appear at the top\nof the released 0.12-series changelogs.","shortMessageHtmlLink":"Remove Changelog section for far-off unreleased 0.13"}},{"before":"ec7c738bdee42ce714b0cf7d00077782fde5c190","after":"00276417e47819f076707d08063608aa18f896b3","ref":"refs/heads/bytestring-0.12","pushedAt":"2024-02-15T20:11:03.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Prepare changelog for 0.12.1.0 (#658)\n\n* WIP: Prepare changelog for 0.12.1.0\n\n* fiddle with CI\n\n* Revert \"fiddle with CI\"\n\nThis reverts commit 3e220052bb1f98ea574f7a362b98bf96fdc01f7e.\n\n* More changelog updates\n\n* Mention `pure-haskell` flag in Changelog.md\n\n* Add hidden entry for #660\n\n(cherry picked from commit 314e2574984def361b0128aeae690241cd8bc820)","shortMessageHtmlLink":"Prepare changelog for 0.12.1.0 (#658)"}},{"before":"305604c4cfa6111c1d256053fb54c745afc95e5e","after":"314e2574984def361b0128aeae690241cd8bc820","ref":"refs/heads/master","pushedAt":"2024-02-15T19:51:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Prepare changelog for 0.12.1.0 (#658)\n\n* WIP: Prepare changelog for 0.12.1.0\r\n\r\n* fiddle with CI\r\n\r\n* Revert \"fiddle with CI\"\r\n\r\nThis reverts commit 3e220052bb1f98ea574f7a362b98bf96fdc01f7e.\r\n\r\n* More changelog updates\r\n\r\n* Mention `pure-haskell` flag in Changelog.md\r\n\r\n* Add hidden entry for #660","shortMessageHtmlLink":"Prepare changelog for 0.12.1.0 (#658)"}},{"before":"161780a31eafbb8627547126cc4129982ff20650","after":"305604c4cfa6111c1d256053fb54c745afc95e5e","ref":"refs/heads/master","pushedAt":"2024-02-15T19:46:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Remove remaining uses of FFI under -fpure-haskell (#660)\n\nAll of these were standard C functions that GHC's JS backend\r\nactually somewhat supports; their shims can be found in the\r\ncompiler source at \"rts/js/mem.js\". But it seems simpler to\r\njust get rid of all FFI uses with -fpure-haskell rather than\r\ntry to keep track of which functions GHC supports.\r\n\r\nThe pure Haskell implementation of memcmp runs about 6-7x as fast\r\nas the simple one-byte-at-a-time implementation for long equal\r\nbuffers, which makes it... about the same speed as the\r\npre-existing shim, even though the latter is also a one-byte-\r\nat-a-time implementation!\r\n\r\nApparently GHC's JS backend is not yet able to produce efficient\r\ncode for tight loops like these yet; the biggest problem is that\r\nit does not perform any loopification so each iteration must go\r\nthrough a generic-call indirection.\r\n\r\nUnfortunately that means that this patch probably makes 'strlen'\r\nand 'memchr' much slower with the JS backend.","shortMessageHtmlLink":"Remove remaining uses of FFI under -fpure-haskell (#660)"}},{"before":"70fa96b68eb9a1255725a58084913419c268171d","after":"161780a31eafbb8627547126cc4129982ff20650","ref":"refs/heads/master","pushedAt":"2024-02-15T02:36:45.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Move all endianness/byte-order CPP into one module (#659)","shortMessageHtmlLink":"Move all endianness/byte-order CPP into one module (#659)"}},{"before":"418515e984935e4156aa62c9fbc2504dd4e2e8b2","after":"70fa96b68eb9a1255725a58084913419c268171d","ref":"refs/heads/master","pushedAt":"2024-02-15T00:28:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Use `BS.unsafeCreateFp` in `fromShort` (#662)\n\nThis ensures that the result of `fromShort` is properly\r\nprotected by a call to `mkDeferredByteString`.","shortMessageHtmlLink":"Use BS.unsafeCreateFp in fromShort (#662)"}},{"before":"d497f398b436c57aefc0e2453a4df4d6688995ce","after":"418515e984935e4156aa62c9fbc2504dd4e2e8b2","ref":"refs/heads/master","pushedAt":"2024-02-15T00:28:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Fix known type mismatch in sbs_elem_index (#661)\n\nSee #653. A complete audit has not been done,\r\nbut let's just fix the known bug anyway.","shortMessageHtmlLink":"Fix known type mismatch in sbs_elem_index (#661)"}},{"before":"ed7a9d40838ebcf51934a8689d418419af8ad7be","after":"ec7c738bdee42ce714b0cf7d00077782fde5c190","ref":"refs/heads/bytestring-0.12","pushedAt":"2024-02-07T23:22:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Add pure Haskell implementation (#631)\n\nbytestring used to rely on C functions. This patch adds equivalent\nfunctions implemented in Haskell. The main purpose is for the JavaScript\nbackend to fully support bytestring.\n\nPure Haskell implementation can be enabled explicitly with a cabal flag.\nIt's automatically enabled for the JavaScript platform.\n\nThanks to Matthew Craven for the thorough review and the many\nsuggestions.\n\nCo-authored-by: Matthew Craven \n(cherry picked from commit d497f398b436c57aefc0e2453a4df4d6688995ce)","shortMessageHtmlLink":"Add pure Haskell implementation (#631)"}},{"before":"2bbc97ead2580f98a13940db5e9e527c4a229822","after":"d497f398b436c57aefc0e2453a4df4d6688995ce","ref":"refs/heads/master","pushedAt":"2024-02-07T23:18:16.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Add pure Haskell implementation (#631)\n\nbytestring used to rely on C functions. This patch adds equivalent\r\nfunctions implemented in Haskell. The main purpose is for the JavaScript\r\nbackend to fully support bytestring.\r\n\r\nPure Haskell implementation can be enabled explicitly with a cabal flag.\r\nIt's automatically enabled for the JavaScript platform.\r\n\r\nThanks to Matthew Craven for the thorough review and the many\r\nsuggestions.\r\n\r\nCo-authored-by: Matthew Craven ","shortMessageHtmlLink":"Add pure Haskell implementation (#631)"}},{"before":"3bded3c201129670bef65c7c15ffbdc187c98a6c","after":"ed7a9d40838ebcf51934a8689d418419af8ad7be","ref":"refs/heads/bytestring-0.12","pushedAt":"2024-02-05T03:30:13.000Z","pushType":"push","commitsCount":7,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Data.ByteString.Lazy.dropEnd: Use two-pointers technique (#629)\n\n* Data.ByteString.Lazy.dropEnd: Use two-pointers technique\n\nThis can be seen as using the input itself as an implicit\nqueue; we formerly copied its chunks into an explicit queue.\n\nBy writing the key logic as a polymorphic `splitAtEndFold`,\nit was easy to re-use it for `takeEnd`; the latter function\nshould now operate in constant stack space and can release\ninitial chunks of a very long input string sooner.\n\n* Fix a very silly bug, and strengthen tests\n\n...so that a plain 'cabal test' finds the bug almost every try\ninstead of finding it only every few dozen tries\n\n* Actually work around the poison instance\n\n(Some re-compilation check somewhere set a trap for me.)\n\nThis also replaces fromIntegral with intToIndexTy in a few places.\n\n* Rewrite the poison instance using TypeError\n\n* Rename \"bsL\" -> \"toSplit\" and \"bsR\" -> \"toScan\"\n\n* Add basic benchmarks for lazy takeEnd/splitEnd\n\nAccording to these benchmarks, the new implementation for takeEnd\nis somewhat faster and the new implementation for dropEnd is roughly\n3.5x to 4x as quick as its predecessor.\n\n(cherry picked from commit 2bbc97ead2580f98a13940db5e9e527c4a229822)","shortMessageHtmlLink":"Data.ByteString.Lazy.dropEnd: Use two-pointers technique (#629)"}},{"before":"cff44213d78e1744c814eba8cdd70a90e741fcfc","after":"2bbc97ead2580f98a13940db5e9e527c4a229822","ref":"refs/heads/master","pushedAt":"2024-02-04T14:21:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Data.ByteString.Lazy.dropEnd: Use two-pointers technique (#629)\n\n* Data.ByteString.Lazy.dropEnd: Use two-pointers technique\r\n\r\nThis can be seen as using the input itself as an implicit\r\nqueue; we formerly copied its chunks into an explicit queue.\r\n\r\nBy writing the key logic as a polymorphic `splitAtEndFold`,\r\nit was easy to re-use it for `takeEnd`; the latter function\r\nshould now operate in constant stack space and can release\r\ninitial chunks of a very long input string sooner.\r\n\r\n* Fix a very silly bug, and strengthen tests\r\n\r\n...so that a plain 'cabal test' finds the bug almost every try\r\ninstead of finding it only every few dozen tries\r\n\r\n* Actually work around the poison instance\r\n\r\n(Some re-compilation check somewhere set a trap for me.)\r\n\r\nThis also replaces fromIntegral with intToIndexTy in a few places.\r\n\r\n* Rewrite the poison instance using TypeError\r\n\r\n* Rename \"bsL\" -> \"toSplit\" and \"bsR\" -> \"toScan\"\r\n\r\n* Add basic benchmarks for lazy takeEnd/splitEnd\r\n\r\nAccording to these benchmarks, the new implementation for takeEnd\r\nis somewhat faster and the new implementation for dropEnd is roughly\r\n3.5x to 4x as quick as its predecessor.","shortMessageHtmlLink":"Data.ByteString.Lazy.dropEnd: Use two-pointers technique (#629)"}},{"before":"e456ea1ddaeafa90416ea9e4fdd937fa88ebcc61","after":"cff44213d78e1744c814eba8cdd70a90e741fcfc","ref":"refs/heads/master","pushedAt":"2024-02-03T16:57:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Use `NonEmpty` to clean up errors in `integerDec` (#655)","shortMessageHtmlLink":"Use NonEmpty to clean up errors in integerDec (#655)"}},{"before":"93fdd3a4174439c4619662fbda2f7b8467ba1d1d","after":"e456ea1ddaeafa90416ea9e4fdd937fa88ebcc61","ref":"refs/heads/master","pushedAt":"2024-02-02T20:29:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"doc: Fix haddocks in Data.ByteString.Short (#654)","shortMessageHtmlLink":"doc: Fix haddocks in Data.ByteString.Short (#654)"}},{"before":"2fbb783a518233514762eb4feb4032a88c9a3f80","after":"3bded3c201129670bef65c7c15ffbdc187c98a6c","ref":"refs/heads/bytestring-0.12","pushedAt":"2024-02-01T20:56:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"clyring","name":"Matthew Craven","path":"/clyring","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12776503?s=80&v=4"},"commit":{"message":"Implement instance Data (#614)\n\n* Add functionality for toConstr\n\n* Other instances fixed\n\n* Move test\n\n* test passes\n\n* Add gshow tests\n\n* Typo\n\n* Add explicit string test\n\n* instance Data: implement gunfold and dataTypeOf\n\n* instance Data: fix tests\n\n* Fix emulated builds\n\n* Restore derived instance Data ShortByteString\n\n* Add instance Generic ShortByteString\n\n* Review suggestions\n\n---------\n\nCo-authored-by: Colton Clemmer \n(cherry picked from commit 1b9e6ec9a8a19a76b7b94f9fc5e9274681ea3084)","shortMessageHtmlLink":"Implement instance Data (#614)"}},{"before":"be0d59cea4df1bd9d24e9d26e5788db1bace9d1d","after":null,"ref":"refs/heads/riscv64","pushedAt":"2024-02-01T00:47:36.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"Bodigrim","name":"ˌbodʲɪˈɡrʲim","path":"/Bodigrim","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2293557?s=80&v=4"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xOVQxOTozODoxNC4wMDAwMDBazwAAAAS7QPIx","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xOVQxOTozODoxNC4wMDAwMDBazwAAAAS7QPIx","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wMi0wMVQwMDo0NzozNi4wMDAwMDBazwAAAAPum69j"}},"title":"Activity · haskell/bytestring"}