enumset 0.0.3 → 0.0.4
raw patch · 6 files changed
+26/−14 lines, 6 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.EnumSet.PackedEnum: pack :: (Bits w, Enum a, Enum b) => T w a b -> b -> T w a
+ Data.EnumSet.PackedEnum: pack :: (Num w, Bits w, Enum a, Enum b) => T w a b -> b -> T w a
- Data.EnumSet.PackedEnum: put :: (Bits w, Enum a, Enum b) => T w a b -> b -> T w a -> T w a
+ Data.EnumSet.PackedEnum: put :: (Num w, Bits w, Enum a, Enum b) => T w a b -> b -> T w a -> T w a
Files
- enumset.cabal +6/−1
- src/Data/EnumSet.hs +10/−6
- src/Data/EnumSet/PackedEnum.hs +2/−2
- src/Data/EnumSet/Utility.hs +4/−1
- src/Data/FlagSet.hs +2/−2
- src/Data/FlagSet/PackedRecord.hs +2/−2
enumset.cabal view
@@ -1,6 +1,6 @@ -- would also be useful as type-safe alternative in wx, wxcore Name: enumset-Version: 0.0.3+Version: 0.0.4 License: BSD3 License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -22,6 +22,11 @@ Cabal-Version: >=1.10 Tested-With: GHC==6.10.4, GHC==6.12.3 Build-Type: Simple++Source-Repository this+ Tag: 0.0.4+ Type: darcs+ Location: http://code.haskell.org/~thielema/enumset/ Source-Repository head Type: darcs
src/Data/EnumSet.hs view
@@ -35,6 +35,7 @@ import qualified Data.Bits as B import Data.Bits (Bits, )+import qualified Data.EnumSet.Utility as U import Data.Monoid (Monoid(mempty, mappend), ) @@ -70,13 +71,13 @@ fromEnum = Cons . B.bit . P.fromEnum fromEnums :: (Enum a, Bits w) => [a] -> T w a-fromEnums = Cons . foldl B.setBit 0 . map P.fromEnum+fromEnums = Cons . foldl B.setBit U.empty . map P.fromEnum toEnums :: (Enum a, Bits w) => T w a -> [a] toEnums = map fst . filter (P.flip B.testBit 0 . snd) . zip [P.toEnum 0 ..] .- takeWhile (0/=) . iterate (P.flip B.shiftR 1) .+ takeWhile (U.empty /= ) . iterate (P.flip B.shiftR 1) . decons intToEnums :: (Enum a, Integral w) => T w a -> [a]@@ -100,7 +101,7 @@ foldl (\(x0,pos) testPos -> let x1 = B.shiftR x0 testPos- in if x1 == 0+ in if x1 == U.empty then (x0, pos) else (x1, pos+testPos)) (x,0) $@@ -115,14 +116,14 @@ -} {-# INLINE singletonByPosition #-} singletonByPosition :: (Bits w) => Int -> T w a-singletonByPosition = Cons . B.setBit 0+singletonByPosition = Cons . B.setBit U.empty null :: (Enum a, Bits w) => T w a -> Bool-null (Cons x) = x==0+null (Cons x) = x==U.empty empty :: (Enum a, Bits w) => T w a-empty = Cons 0+empty = Cons U.empty disjoint :: (Enum a, Bits w) => T w a -> T w a -> Bool disjoint x y = null (x .&. y)@@ -186,4 +187,7 @@ fromBool :: (Enum a, Bits w) => a -> Bool -> T w a fromBool n b =+ Cons $ if b then B.bit (P.fromEnum n) else U.empty+{- requires Num instance Cons (B.shiftL (fromIntegral $ P.fromEnum b) (P.fromEnum n))+-}
src/Data/EnumSet/PackedEnum.hs view
@@ -33,7 +33,7 @@ is placed at the specified indices. -} pack ::- (Bits w, Enum a, Enum b) =>+ (Num w, Bits w, Enum a, Enum b) => T w a b -> b -> ES.T w a pack (Cons mask pos) = ES.Cons . flip B.shiftL pos .@@ -52,7 +52,7 @@ Overwrite an enumset at the specified indices with the value of type @b@. -} put ::- (Bits w, Enum a, Enum b) =>+ (Num w, Bits w, Enum a, Enum b) => T w a b -> b -> ES.T w a -> ES.T w a put set x = (pack set x ES..|.) . clear set
src/Data/EnumSet/Utility.hs view
@@ -1,7 +1,7 @@ module Data.EnumSet.Utility where import qualified Data.Bits as B-import Data.Bits (Bits, (.&.), )+import Data.Bits (Bits, bit, xor, (.&.), ) -- fixity like .&.@@ -9,3 +9,6 @@ (.-.) :: (Bits w) => w -> w -> w x .-. y = x .&. B.complement y++empty :: (Bits w) => w+empty = xor (bit 0) (bit 0)
src/Data/FlagSet.hs view
@@ -21,7 +21,7 @@ import qualified Data.Accessor.Basic as Acc -import Data.EnumSet.Utility ((.-.), )+import Data.EnumSet.Utility (empty, (.-.), ) import qualified Prelude as P import Prelude hiding (Enum, fromEnum, toEnum, null, flip, )@@ -113,7 +113,7 @@ @mappend a b@ means that values stored in @b@ overwrite corresponding values in @a@. -} instance (Bits w) => Monoid (MaskedValue w a) where- mempty = MaskedValue 0 0+ mempty = MaskedValue empty empty mappend (MaskedValue mx vx) (MaskedValue my vy) = MaskedValue (mx .|. my) (vx .-. my .|. vy)
src/Data/FlagSet/PackedRecord.hs view
@@ -13,7 +13,7 @@ import Data.EnumSet.Utility ((.-.), ) -leastSigBit :: Bits w => w -> w+leastSigBit :: (Num w, Bits w) => w -> w leastSigBit m = (-m) .&. m getIntByMask ::@@ -37,7 +37,7 @@ maskFromNumber ::- (Bits w) =>+ (Num w, Bits w) => Int -> w maskFromNumber number = B.shiftL 1 number - 1