Skip to content

Repository files navigation

bitset Build Status

A bit set is a compact data structure, which maintains a set of members from a type that can be enumerated (i. e. has an Enum instance). Current implementation is abstract with respect to conatiner type, so any numeric type with Bits instance can be used as a container.

Here's a usage example for a dynamic bit set, which uses a tweaked version of Integer for storing bits:

importData.BitSet (BitSet, (\\))
importqualifiedData.BitSetasBitSetdataColor=Red | Green | Bluederiving (Show, Enum)
main::IO()
main =print$ bs \\BitSet.singleton Bluewherebs::BitSetColor
bs =BitSet.fromList [Red, Green, Blue]

The API is exactly the same for a static bitset, based on native Word. Here's an example from [hen] hen library, which uses Data.BitSet to store Xen domain status flags:

importqualifiedData.BitSet.WordasBSdataDomainFlag=Dying
| Crashed
| Shutdown
| Paused
| Blocked
| Running
| HVM
| Debuggedderiving (Enum, Show)
isAlive::DomainFlag->Bool
isAlive =not.BS.null.BS.intersect (BS.fromList [Crashed, Shutdown])

Benchmarks

To run benchmarks, configure cabal with benchmarks and build:

$ cabal-dev install-deps --enable-benchmarks && cabal-dev build
$ ./dist/build/bitset-benchmarks/bitset-benchmarks -o dist/bench.html

About

A compact functional set data structure

Resources

Stars

19 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages