HORIZON HASKELLDocslts/ghc-9.14.xb9228482026-10-12Search packagesCtrl K
Theme: |

GHC 9.14.1 · lts/ghc-9.14.x · b922848 · 2026-10-12

Package1.1.6.0DataBit Vectors

bitvec

Space-efficient bit vectors

  • Version1.1.6.0
  • CategoryData, Bit Vectors
  • LicenceBSD-3-Clause
  • AuthorAndrew Lelechenko <andrew.lelechenko@gmail.com>, James Cook <mokus@deepbondi.net>
  • MaintainerAndrew Lelechenko <andrew.lelechenko@gmail.com>
  • Homepagegithub.com/Bodigrim/bitvec
  • Pinned byhackage bitvec 1.1.6.0
  • Sourcebitvec-1.1.6.0 on Hackage

Modules

  • Data.BitThis module exposes an interface with non-thread-safe writes and flips.
  • Data.Bit.ThreadSafeThis module exposes an interface with thread-safe writes and flips.

Description

A newtype over Bool with a better Vector instance: 8x less memory, up to 3500x faster.

The vector package represents unboxed arrays of Bools spending 1 byte (8 bits) per boolean. This library provides a newtype wrapper Bit and a custom instance of an unboxed Vector, which packs bits densely, achieving an 8x smaller memory footprint. The performance stays mostly the same; the most significant degradation happens for random writes (up to 10% slower). On the other hand, for certain bulk bit operations Vector Bit is up to 3500x faster than Vector Bool.

Data.Bit is faster, but writes and flips are not thread-safe. This is because naive updates are not atomic: they read the whole word from memory, then modify a bit, then write the whole word back. Concurrently modifying non-intersecting slices of the same underlying array may also lead to unexpected results, since they can share a word in memory. Data.Bit.ThreadSafe is slower (usually 10-20%), but writes and flips are thread-safe. Additionally, concurrently modifying non-intersecting slices of the same underlying array works as expected. However, operations that affect multiple elements are not guaranteed to be atomic.

bv and bv-little do not offer mutable vectors. array is memory-efficient for Bool, but lacks a handy Vector interface and is not thread-safe.

Depends on

5 packages

Used by in this set · 1