About

Metadata

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

  • Lottery factor: 1

Links

Installation

Readme

Bitmasks

Bitmasks for boolean flags.

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 (I have no idea what I'm talking about) the toppings :

>>> 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)]