packages feed

bv-0.4.1: README.md

A library for bit-vector arithmetic in Haskell
=========================================

Bit-vectors are represented as a pair of a _size_ and a _value_,
where sizes are of type _Int_ and values are _Integer_.
Operations on bit-vectors are translated into operations on integers.
Remarkably, most operations taking two or more bit-vectors, will
perform zero-padding to adjust the size of the input bit-vectors
when needed (eg. when adding bit-vectors of different sizes).
Indexing operators don't do this, to avoid masking _out of bounds_
errors.

Other libraries
-------------

There exist many Haskell libraries to handle bit-vectors, but to the
best of my knowledge _bv_ is the only one that adequately supports
bit-vector arithmetic.

If you do not need bit-vector arithmetic, then you may consider using
any of these other libraries, which could offer more compact and 
efficient implementations of bit arrays.

Importing and name clashes
-----------------------

Many exported functions name-clash with Prelude functions, it is
therefore recommended to do a qualified import:

    import           Data.BitVector ( BV )
    import qualified Data.BitVector as BV

Running the test suite
--------------------

If you wish to run the test suite simply:

    cabal configure -ftest
    cabal build

Then run:

    dist/build/bv-tester/bv-tester

Performance
----------

**Tip:** For best performance compile with _-fgmp_.

**Tip:** If you are brave enough, compile with _-f -check-bounds_ (disables index bounds checking).

The _BV_ datatype is simply a pair of an _Int_, to represent the
_size_, and an arbitrary-precision _Integer_, to represent the
_value_ of a bit-vector.
Both fields are strict, and we instruct GHC to unbox strict fields.
Further, we ask GHC to inline virtually all bit-vector operations.
When inlined, GHC should be able to remove any overhead associated
with the _BV_ data type, and unbox bit-vector sizes.
Performance should depend mostly on the _Integer_ data type
implementation.