fast multi-dimensional unboxed bit packed Bool arrays.
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:
unboxed bit packed Bool array,
multi-dimensional indexing,
fast (de)serialization, or interoperable with foreign code,
fast aggregate operations (fold, map, zip).
Quick tour of the bitwise library:
- Data.Bits.Bitwise
Lift boolean operations on
Boolto bitwise operations onData.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 ixis about 40% slower thanUArray ix Bool,Control.Monad.ST.STmutable random access single bit reads:STBitArray s ixis about the same asSTUArray s ix Bool,immutable map
Bool -> Bool:BitArray ixis about 85x faster thanUArray ix Bool,immutable zipWith
Bool -> Bool -> Bool:BitArray ixis about 1300x faster thanUArray ix Bool.