bitwise

fast multi-dimensional unboxed bit packed Bool arrays

http://code.mathr.co.uk/bitwise

Version on this page:0.1.0.2
LTS Haskell 6.35:0.1.1.1
Stackage Nightly 2016-05-25:0.1.1
Latest on Hackage:1.0.0.1@rev:9

See all snapshots bitwise appears in

BSD-3-Clause licensed by Claude Heiland-Allen
Maintained by [email protected]
This version can be pinned in stack with:bitwise-0.1.0.2@sha256:5169ea12687bbfef7dfb8912230fb8d23026dc4f39c4c5b9bb3f33850d8d6bd2,3148

Module documentation for 0.1.0.2

Depends on 3 packages(full list with versions):
Used by 1 package in nightly-2015-05-13(full list with versions):

Unboxed multidimensional bit packed Bool arrays with fast aggregate operations based on lifting Bool operations to bitwise operations.

There are many other bit packed structures out there, but none met all of these requirements:

  1. unboxed bit packed Bool array,

  2. multi-dimensional indexing,

  3. fast (de)serialization, or interoperable with foreign code,

  4. fast aggregate operations (fold, map, zip).

Quick tour of the bitwise library:

Data.Bits.Bitwise
Lift boolean operations on Bool to bitwise operations on Data.Bits.Bits.
Data.Array.BitArray
Immutable bit arrays.
Data.Array.BitArray.ST
Mutable bit arrays in Control.Monad.ST.ST.
Data.Array.BitArray.IO
Mutable bit arrays in IO.
Data.Array.BitArray.ByteString
(De)serialization.
Codec.Image.PBM
Portable bitmap monochrome 2D image format.

Very rough performance benchmarks:

  • immutable random access single bit reads: BitArray ix is about 40% slower than UArray ix Bool,

  • Control.Monad.ST.ST mutable random access single bit reads: STBitArray s ix is about the same as STUArray s ix Bool,

  • immutable map Bool -> Bool: BitArray ix is about 85x faster than UArray ix Bool,

  • immutable zipWith Bool -> Bool -> Bool: BitArray ix is about 1300x faster than UArray ix Bool.