enumset 0.0.4 → 0.0.4.1
raw patch · 3 files changed
+18/−7 lines, 3 filesdep +semigroupsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: semigroups
API changes (from Hackage documentation)
- Data.EnumSet: (.&., xor, .|., .-.) :: (Enum a, Bits w) => T w a -> T w a -> T w a
- Data.EnumSet: decons :: T word index -> word
- Data.EnumSet: instance (Enum a, Bits w) => Monoid (T w a)
- Data.EnumSet: instance (Enum a, Storable w) => Storable (T w a)
- Data.EnumSet: instance Eq word => Eq (T word index)
- Data.FlagSet: decons :: T word a -> word
- Data.FlagSet: instance Bits w => Monoid (MaskedValue w a)
- Data.FlagSet: instance Eq w => Eq (Mask w a b)
- Data.FlagSet: instance Eq w => Eq (MaskedValue w a)
- Data.FlagSet: instance Eq w => Eq (Value w b)
- Data.FlagSet: instance Eq word => Eq (T word a)
- Data.FlagSet: instance Show w => Show (Mask w a b)
- Data.FlagSet: instance Show w => Show (MaskedValue w a)
- Data.FlagSet: instance Show w => Show (Value w b)
- Data.FlagSet: instance Storable w => Storable (T w a)
- Data.FlagSet: unmask :: Mask w a b -> w
- Data.FlagSet: unvalue :: Value w b -> w
+ Data.EnumSet: (.&.) :: (Enum a, Bits w) => T w a -> T w a -> T w a
+ Data.EnumSet: (.-.) :: (Enum a, Bits w) => T w a -> T w a -> T w a
+ Data.EnumSet: (.|.) :: (Enum a, Bits w) => T w a -> T w a -> T w a
+ Data.EnumSet: [decons] :: T word index -> word
+ Data.EnumSet: infixl 5 .|.
+ Data.EnumSet: infixl 7 .-.
+ Data.EnumSet: instance (GHC.Enum.Enum a, Data.Bits.Bits w) => Data.Semigroup.Semigroup (Data.EnumSet.T w a)
+ Data.EnumSet: instance (GHC.Enum.Enum a, Data.Bits.Bits w) => GHC.Base.Monoid (Data.EnumSet.T w a)
+ Data.EnumSet: instance (GHC.Enum.Enum a, Foreign.Storable.Storable w) => Foreign.Storable.Storable (Data.EnumSet.T w a)
+ Data.EnumSet: instance GHC.Classes.Eq word => GHC.Classes.Eq (Data.EnumSet.T word index)
+ Data.EnumSet: xor :: (Enum a, Bits w) => T w a -> T w a -> T w a
+ Data.FlagSet: [decons] :: T word a -> word
+ Data.FlagSet: [unmask] :: Mask w a b -> w
+ Data.FlagSet: [unvalue] :: Value w b -> w
+ Data.FlagSet: instance Data.Bits.Bits w => Data.Semigroup.Semigroup (Data.FlagSet.MaskedValue w a)
+ Data.FlagSet: instance Data.Bits.Bits w => GHC.Base.Monoid (Data.FlagSet.MaskedValue w a)
+ Data.FlagSet: instance Foreign.Storable.Storable w => Foreign.Storable.Storable (Data.FlagSet.T w a)
+ Data.FlagSet: instance GHC.Classes.Eq w => GHC.Classes.Eq (Data.FlagSet.Mask w a b)
+ Data.FlagSet: instance GHC.Classes.Eq w => GHC.Classes.Eq (Data.FlagSet.MaskedValue w a)
+ Data.FlagSet: instance GHC.Classes.Eq w => GHC.Classes.Eq (Data.FlagSet.Value w b)
+ Data.FlagSet: instance GHC.Classes.Eq word => GHC.Classes.Eq (Data.FlagSet.T word a)
+ Data.FlagSet: instance GHC.Show.Show w => GHC.Show.Show (Data.FlagSet.Mask w a b)
+ Data.FlagSet: instance GHC.Show.Show w => GHC.Show.Show (Data.FlagSet.MaskedValue w a)
+ Data.FlagSet: instance GHC.Show.Show w => GHC.Show.Show (Data.FlagSet.Value w b)
- Data.EnumSet: singletonByPosition :: Bits w => Int -> T w a
+ Data.EnumSet: singletonByPosition :: (Bits w) => Int -> T w a
- Data.FlagSet: fromEnum :: (Enum a, Bits w) => a -> MaskedValue w a
+ Data.FlagSet: fromEnum :: (Enum a, (Bits w)) => a -> MaskedValue w a
- Data.FlagSet: match :: Bits w => T w a -> MaskedValue w a -> Bool
+ Data.FlagSet: match :: (Bits w) => T w a -> MaskedValue w a -> Bool
Files
- enumset.cabal +6/−4
- src/Data/EnumSet.hs +6/−1
- src/Data/FlagSet.hs +6/−2
enumset.cabal view
@@ -1,6 +1,5 @@--- would also be useful as type-safe alternative in wx, wxcore Name: enumset-Version: 0.0.4+Version: 0.0.4.1 License: BSD3 License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -19,12 +18,14 @@ the @Data.Edison.Coll.EnumSet@ module in the @edison@ package, however our implementation allows you to choose the embedding type and thus the maximum size of the set.+ .+ See also @data-flags@ and @Data.EnumSet@ in @enummapset@. Cabal-Version: >=1.10-Tested-With: GHC==6.10.4, GHC==6.12.3+Tested-With: GHC==7.4.2, GHC==7.6.3, GHC==8.4.1 Build-Type: Simple Source-Repository this- Tag: 0.0.4+ Tag: 0.0.4.1 Type: darcs Location: http://code.haskell.org/~thielema/enumset/ @@ -37,6 +38,7 @@ Build-Depends: data-accessor >=0.2.1 && <0.3, storable-record >=0.0.1 && <0.1,+ semigroups >=0.1 && <1.0, base >= 4 && <5 GHC-Options: -Wall
src/Data/EnumSet.hs view
@@ -38,6 +38,7 @@ import qualified Data.EnumSet.Utility as U import Data.Monoid (Monoid(mempty, mappend), )+import Data.Semigroup (Semigroup((<>)), ) import qualified Foreign.Storable.Newtype as Store import Foreign.Storable (Storable(sizeOf, alignment, peek, poke), )@@ -57,9 +58,13 @@ peek = Store.peek Cons poke = Store.poke decons ++instance (Enum a, Bits w) => Semigroup (T w a) where+ (<>) = (.|.)+ {- | Since this data type is intended for constructing flags,-we choose the set union as mappend.+we choose the set union as 'mappend'. For intersection we would also not have a canonical identity element. -} instance (Enum a, Bits w) => Monoid (T w a) where
src/Data/FlagSet.hs view
@@ -15,6 +15,7 @@ import Data.Bits (Bits, (.&.), (.|.), ) import Data.Monoid (Monoid(mempty, mappend, mconcat), )+import Data.Semigroup (Semigroup((<>)), ) import qualified Foreign.Storable.Newtype as Store import Foreign.Storable (Storable(sizeOf, alignment, peek, poke), )@@ -109,13 +110,16 @@ maskValue (Mask m) (Value v) = MaskedValue m v +instance (Bits w) => Semigroup (MaskedValue w a) where+ MaskedValue mx vx <> MaskedValue my vy =+ MaskedValue (mx .|. my) (vx .-. my .|. vy)+ {- | @mappend a b@ means that values stored in @b@ overwrite corresponding values in @a@. -} instance (Bits w) => Monoid (MaskedValue w a) where mempty = MaskedValue empty empty- mappend (MaskedValue mx vx) (MaskedValue my vy) =- MaskedValue (mx .|. my) (vx .-. my .|. vy)+ mappend = (<>) class Enum a where