Copyright | (c) David Feuer 2016 |
---|---|
License | BSD-style |
Maintainer | libraries@haskell.org |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | Haskell98 |
WARNING
This module is considered internal.
The Package Versioning Policy does not apply.
The contents of this module may change in any way whatsoever and without any warning between minor versions of this package.
Authors importing this module are expected to track development closely.
Description
An extremely light-weight, fast, and limited representation of a string of
up to (2*WORDSIZE - 2) bits. In fact, there are two representations,
misleadingly named bit queue builder and bit queue. The builder supports
only emptyQB
, creating an empty builder, and snocQB
, enqueueing a bit.
The bit queue builder is then turned into a bit queue using buildQ
, after
which bits can be removed one by one using unconsQ
. If the size limit is
exceeded, further operations will silently produce nonsense.
Documentation
Create an empty bit queue builder. This is represented as a single guard bit in the most significant position.
snocQB :: BitQueueB -> Bool -> BitQueueB Source #
Enqueue a bit. This works by shifting the queue right one bit, then setting the most significant bit as requested.
buildQ :: BitQueueB -> BitQueue Source #
Convert a bit queue builder to a bit queue. This shifts in a new guard bit on the left, and shifts right until the old guard bit falls off.