data-flags-0.0.3: A package for working with bit masks and flags in general.

Data.Flags

Description

This module provides type classes for working with sets of flags. In particular, with wrappers around bit masks:

 import Data.Flags

 newtype MyFlags = MyFlags CInt deriving (Eq, Flags)

 #{enum MyFlags, MyFlags
  , myFlag1 = C_FLAG1
  , myFlag2 = C_FLAG2
  , myFlag3 = C_FLAG3
  }

 f :: MyFlags -> IO ()
 f = ...

Or, using Template Haskell:

 import Data.Flags.TH

 $(bitmaskWrapper "MyFlags" ''CInt [] False
     [("myFlag1", #{const C_FLAG1}),
      ("myFlag2", #{const C_FLAG2}),
      ("myFlag3", #{const C_FLAG3})])

And then use it like this:

 f $ myFlag1 .+. myFlag3

Synopsis

Documentation

class Eq a => Flags a whereSource

Methods

noFlags :: aSource

The empty set of flags.

andFlags :: a -> a -> aSource

Union of two flag sets.

butFlags :: a -> a -> aSource

Difference between two flag sets.

commonFlags :: a -> a -> aSource

Intersection of two flag sets.

(.+.) :: Flags a => a -> a -> aSource

Alias for andFlags.

(.-.) :: Flags a => a -> a -> aSource

Alias for butFlags.

(.*.) :: Flags a => a -> a -> aSource

Alias for commonFlags.

allBut :: BoundedFlags a => a -> aSource

Shorthand for allFlags .-. x.

containsAll :: Flags a => a -> a -> BoolSource

Test if the first flag set contains all flags from the second.

(.<=.) :: Flags a => a -> a -> BoolSource

Shorthand for flip containsAll.

(.>=.) :: Flags a => a -> a -> BoolSource

Alias for containsAll.

containsSome :: Flags a => a -> a -> BoolSource

Test if two flag sets intersect.

(.~.) :: Flags a => a -> a -> BoolSource

Alias for containsSome.

containsNone :: Flags a => a -> a -> BoolSource

Test if two flag sets do not intersect.

(./~.) :: Flags a => a -> a -> BoolSource

Alias for containsNone.