Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Data.FlagSet
Description
Introduction
This module provides a data type for a set of flags. Flags are stored efficiently as bits of an unsigned integer.
This module is meant to be imported qualified:
import qualified Data.FlagSet as FlagSet import Data.FlagSet (FlagSet)
The API is basically the same as that of Data.Set from the containers
package.
The functions fromList
and member
also have aliases that can be used
unqualified:
import Data.FlagSet (flags, hasFlag)
Examples
import qualified Data.FlagSet as FlagSet import Data.FlagSet (FlagSet, flags, hasFlag) data WeekDay = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday deriving (Eq, Show, Enum, Bounded) workDays = flags [Monday .. Friday] weekEndDays = flags [Saturday, Sunday] allDays = FlagSet.full worksOnTheWeekEnd :: FlagSet WeekDay -> Bool worksOnTheWeekEnd = not . FlagSet.null . FlagSet.intersection weekEndDays worksOnSunday :: FlagSet WeekDay -> Bool worksOnSunday = hasFlag Sunday workDayPay :: Rational workDayPay = ... weekEndDayPay :: Rational weekEndDayPay = ... pay :: FlagSet WeekDay -> Rational pay daysWorking = workDayPay * countDays workDays + weekEndDayPay * countDays weekEndDays where countDays = fromIntegral . FlagSet.size . FlagSet.intersection daysWorking
- data FlagSet a
- fromList :: Enum a => [a] -> FlagSet a
- flags :: Enum a => [a] -> FlagSet a
- empty :: FlagSet a
- singleton :: Enum a => a -> FlagSet a
- full :: (Enum a, Bounded a) => FlagSet a
- insert :: Enum a => a -> FlagSet a -> FlagSet a
- delete :: Enum a => a -> FlagSet a -> FlagSet a
- union :: FlagSet a -> FlagSet a -> FlagSet a
- unions :: [FlagSet a] -> FlagSet a
- difference :: FlagSet a -> FlagSet a -> FlagSet a
- intersection :: FlagSet a -> FlagSet a -> FlagSet a
- member :: Enum a => a -> FlagSet a -> Bool
- hasFlag :: Enum a => a -> FlagSet a -> Bool
- null :: FlagSet a -> Bool
- toList :: Enum a => FlagSet a -> [a]
- size :: FlagSet a -> Int
Types
Construction
fromList :: Enum a => [a] -> FlagSet a Source
Create a flag set from a list of flags. Input list can contain duplicates.
Modification
difference :: FlagSet a -> FlagSet a -> FlagSet a Source
The difference of two flag sets.
intersection :: FlagSet a -> FlagSet a -> FlagSet a Source
The intersection of two flag sets.
Tests
hasFlag :: Enum a => a -> FlagSet a -> Bool Source
Alias for member
that can be imported unqualified.