@hackage / bitmasks

Bitmasks for efficient storing of boolean flags

Latest0.0.1

About

Metadata

  • Last updated , by AliceRixte
  • License BSD-3-Clause
  • Maintained by: alice.rixte@u-bordeaux.fr

  • Lottery factor: 1

Links

Installation

Readme

Bitmasks

Haskell BSD3 License Hackage Nightly LTS

Bitmasks for efficient storing of boolean flags.

Alternatives

You might prefer the bitset package, that uses a similar implementation to this library. The main difference between bitset and bitmasks is that, contrarily to bitset, bitmasks is intended to be imported non qualified.

Usage

Define your flags as an enumeration:

import Data.Word

import Data.Bitmask



data PizzaTopping =

    Cheese

  | Mushrooms

  | Pineapple

  | Ham

  deriving (Show, Eq, Bounded, Enum)



-- We only need 8 bits since there are only 4 toppings

type PizzaMask = Bitmask8 PizzaTopping
Creating bitmasks
-- A Margherita pizza (cheese only)

margherita :: PizzaMask

margherita = fromFlags [Cheese]



veggie :: PizzaMask

veggie = fromExceptFlags [Ham]


Access and modify flags

Use getFlag to check if a pizza has a specific topping:

>>> getFlag Cheese funghi

True

>>> getFlag Pineapple funghi

False

Add toppings to a pizza:

>>> hawaiian = addFlags [Pineapple, Ham] margherita

>>> getFlags [Pineapple, Mushroom] hawaiian

True

Make any pizza vegetarian (bitwise AND):

>>> veggieHawaiian = veggie .&. hawaiian

>>> getFlag Ham veggieHawaiian

Toggle the toppinsertFlages, topping toggling should be a thing):

>>> funghi = flipFlags [Pineapple, Mushroom] veggieHawaiian

>>> toFlags funghi

[Cheese,Mushrooms]

Remove a topping:

>>> margherita == deleteFlag Mushroom funghi

True
Convert to lists
-- Get all toppings as a list

>>> toFlags funghi

[Cheese,Mushrooms]

>>> toFlags hawaiian

[Cheese,Pineapple,Ham]



-- Convert to association lists

>>> toFlagsBool funghi

[(Cheese,True),(Mushrooms,True),(Pineapple,False),(Ham,False)]