-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A package for working with bit masks and flags in general. -- -- This package provides type classes for flags and corresponding -- instances for standard numeric types viewed as bit masks. @package data-flags @version 0.0.3.4 -- | Template Haskell utils for declaring flags instances. module Data.Flags.TH -- | Produces Flags instance declaration for the specified instance -- of Bits. dataBitsAsFlags :: Name -> Q [Dec] -- | Produces Flags and BoundedFlags instances declarations -- for the specified instance of Bits. dataBitsAsBoundedFlags :: Name -> Q [Dec] -- | Declare a newtype wrapper around the specified integral type and make -- it an instance of BoundedFlags. For each individual flag -- declare a constant. If a Show instance wasn't requested for -- automatic derivation, declare one with -- --
-- show flags = "WrappingTypeName [IndividualFlags in flags]" --bitmaskWrapper :: String -> Name -> [Name] -> [(String, Integer)] -> Q [Dec] -- | Declare an ADT with the specified constructors and make it an instance -- of Eq, Ord, Show and Storable. enumADT :: String -> Name -> [(String, Integer)] -> Q [Dec] -- | 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 --module Data.Flags class Eq α => Flags α where f1 `commonFlags` f2 = (f1 `andFlags` f2) `butFlags` (f1 `butFlags` f2) `butFlags` (f2 `butFlags` f1) -- | The empty set of flags. noFlags :: Flags α => α -- | Union of two flag sets. andFlags :: Flags α => α -> α -> α -- | Difference between two flag sets. butFlags :: Flags α => α -> α -> α -- | Intersection of two flag sets. commonFlags :: Flags α => α -> α -> α -- | Alias for andFlags. (.+.) :: Flags α => α -> α -> α infixl 6 .+. -- | Alias for butFlags. (.-.) :: Flags α => α -> α -> α infixl 5 .-. -- | Alias for commonFlags. (.*.) :: Flags α => α -> α -> α infixl 7 .*. -- | Use this class when the set of flags is fixed and not likely to change -- in the future. class Flags α => BoundedFlags α -- | Set of all flags. allFlags :: BoundedFlags α => α -- | List the individual flags. enumFlags :: BoundedFlags α => α -> [α] -- | Shorthand for allFlags .-. x. allBut :: BoundedFlags α => α -> α -- | Test if the first flag set contains all flags from the second. containsAll :: Flags α => α -> α -> Bool infix 4 `containsAll` -- | Shorthand for flip containsAll. (.<=.) :: Flags α => α -> α -> Bool infix 4 .<=. -- | Alias for containsAll. (.>=.) :: Flags α => α -> α -> Bool infix 4 .>=. -- | Test if two flag sets intersect. containsSome :: Flags α => α -> α -> Bool infix 4 `containsSome` -- | Alias for containsSome. (.~.) :: Flags α => α -> α -> Bool infix 4 .~. -- | Test if two flag sets do not intersect. containsNone :: Flags α => α -> α -> Bool infix 4 `containsNone` -- | Alias for containsNone. (./~.) :: Flags α => α -> α -> Bool infix 4 ./~. instance Data.Flags.Base.Flags Foreign.C.Types.CULLong instance Data.Flags.Base.BoundedFlags Foreign.C.Types.CULLong instance Data.Flags.Base.Flags Foreign.C.Types.CLLong instance Data.Flags.Base.BoundedFlags Foreign.C.Types.CLLong instance Data.Flags.Base.Flags Foreign.C.Types.CULong instance Data.Flags.Base.BoundedFlags Foreign.C.Types.CULong instance Data.Flags.Base.Flags Foreign.C.Types.CLong instance Data.Flags.Base.BoundedFlags Foreign.C.Types.CLong instance Data.Flags.Base.Flags Foreign.C.Types.CUInt instance Data.Flags.Base.BoundedFlags Foreign.C.Types.CUInt instance Data.Flags.Base.Flags Foreign.C.Types.CInt instance Data.Flags.Base.BoundedFlags Foreign.C.Types.CInt instance Data.Flags.Base.Flags Foreign.C.Types.CUShort instance Data.Flags.Base.BoundedFlags Foreign.C.Types.CUShort instance Data.Flags.Base.Flags Foreign.C.Types.CShort instance Data.Flags.Base.BoundedFlags Foreign.C.Types.CShort instance Data.Flags.Base.Flags Foreign.C.Types.CUChar instance Data.Flags.Base.BoundedFlags Foreign.C.Types.CUChar instance Data.Flags.Base.Flags Foreign.C.Types.CSChar instance Data.Flags.Base.BoundedFlags Foreign.C.Types.CSChar instance Data.Flags.Base.Flags Foreign.C.Types.CChar instance Data.Flags.Base.BoundedFlags Foreign.C.Types.CChar instance Data.Flags.Base.Flags Foreign.Ptr.WordPtr instance Data.Flags.Base.BoundedFlags Foreign.Ptr.WordPtr instance Data.Flags.Base.Flags Foreign.Ptr.IntPtr instance Data.Flags.Base.BoundedFlags Foreign.Ptr.IntPtr instance Data.Flags.Base.Flags GHC.Word.Word64 instance Data.Flags.Base.BoundedFlags GHC.Word.Word64 instance Data.Flags.Base.Flags GHC.Word.Word32 instance Data.Flags.Base.BoundedFlags GHC.Word.Word32 instance Data.Flags.Base.Flags GHC.Word.Word16 instance Data.Flags.Base.BoundedFlags GHC.Word.Word16 instance Data.Flags.Base.Flags GHC.Word.Word8 instance Data.Flags.Base.BoundedFlags GHC.Word.Word8 instance Data.Flags.Base.Flags GHC.Types.Word instance Data.Flags.Base.BoundedFlags GHC.Types.Word instance Data.Flags.Base.Flags GHC.Int.Int64 instance Data.Flags.Base.BoundedFlags GHC.Int.Int64 instance Data.Flags.Base.Flags GHC.Int.Int32 instance Data.Flags.Base.BoundedFlags GHC.Int.Int32 instance Data.Flags.Base.Flags GHC.Int.Int16 instance Data.Flags.Base.BoundedFlags GHC.Int.Int16 instance Data.Flags.Base.Flags GHC.Int.Int8 instance Data.Flags.Base.BoundedFlags GHC.Int.Int8 instance Data.Flags.Base.Flags GHC.Types.Int instance Data.Flags.Base.BoundedFlags GHC.Types.Int instance Data.Flags.Base.Flags GHC.Integer.Type.Integer