packages feed

bitwise-enum 1.0.1.0 → 1.0.1.1

raw patch · 6 files changed

+115/−16 lines, 6 filesdep ~aesondep ~deepseqPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: aeson, deepseq

API changes (from Hackage documentation)

- Data.Enum.Set: type family EnumSetRep a;
- Data.Enum.Set.Base: instance (Data.Bits.Bits w, GHC.Enum.Enum a) => Data.MonoTraversable.MonoPointed (Data.Enum.Set.Base.EnumSet w a)
- Data.Enum.Set.Base: instance (Data.Bits.Bits w, GHC.Num.Num w, GHC.Enum.Enum x, GHC.Read.Read x) => GHC.Read.Read (Data.Enum.Set.Base.EnumSet w x)
- Data.Enum.Set.Base: instance (Data.Bits.FiniteBits w, GHC.Num.Num w, GHC.Classes.Eq a, GHC.Enum.Enum a) => Data.Containers.IsSet (Data.Enum.Set.Base.EnumSet w a)
- Data.Enum.Set.Base: instance (Data.Bits.FiniteBits w, GHC.Num.Num w, GHC.Classes.Eq a, GHC.Enum.Enum a) => Data.Containers.SetContainer (Data.Enum.Set.Base.EnumSet w a)
- Data.Enum.Set.Base: instance (Data.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum a) => Data.MonoTraversable.GrowingAppend (Data.Enum.Set.Base.EnumSet w a)
- Data.Enum.Set.Base: instance (Data.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum a) => Data.MonoTraversable.MonoFoldable (Data.Enum.Set.Base.EnumSet w a)
- Data.Enum.Set.Base: instance (Data.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum a) => Data.MonoTraversable.MonoFunctor (Data.Enum.Set.Base.EnumSet w a)
- Data.Enum.Set.Base: instance (Data.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum a) => Data.MonoTraversable.MonoTraversable (Data.Enum.Set.Base.EnumSet w a)
- Data.Enum.Set.Base: instance (Data.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum a) => GHC.Exts.IsList (Data.Enum.Set.Base.EnumSet w a)
- Data.Enum.Set.Base: instance (Data.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum a, Data.Aeson.Types.ToJSON.ToJSON a) => Data.Aeson.Types.ToJSON.ToJSON (Data.Enum.Set.Base.EnumSet w a)
- Data.Enum.Set.Base: instance (Data.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum x, GHC.Show.Show x) => GHC.Show.Show (Data.Enum.Set.Base.EnumSet w x)
- Data.Enum.Set.Base: instance forall k w (a :: k). Data.Bits.Bits w => GHC.Base.Monoid (Data.Enum.Set.Base.EnumSet w a)
- Data.Enum.Set.Base: instance forall k w (a :: k). Data.Bits.Bits w => GHC.Base.Semigroup (Data.Enum.Set.Base.EnumSet w a)
+ Data.Enum.Set.Base: instance (GHC.Bits.Bits w, GHC.Enum.Enum a) => Data.MonoTraversable.MonoPointed (Data.Enum.Set.Base.EnumSet w a)
+ Data.Enum.Set.Base: instance (GHC.Bits.Bits w, GHC.Num.Num w, GHC.Enum.Enum x, GHC.Read.Read x) => GHC.Read.Read (Data.Enum.Set.Base.EnumSet w x)
+ Data.Enum.Set.Base: instance (GHC.Bits.FiniteBits w, GHC.Num.Num w, GHC.Classes.Eq a, GHC.Enum.Enum a) => Data.Containers.IsSet (Data.Enum.Set.Base.EnumSet w a)
+ Data.Enum.Set.Base: instance (GHC.Bits.FiniteBits w, GHC.Num.Num w, GHC.Classes.Eq a, GHC.Enum.Enum a) => Data.Containers.SetContainer (Data.Enum.Set.Base.EnumSet w a)
+ Data.Enum.Set.Base: instance (GHC.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum a) => Data.MonoTraversable.GrowingAppend (Data.Enum.Set.Base.EnumSet w a)
+ Data.Enum.Set.Base: instance (GHC.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum a) => Data.MonoTraversable.MonoFoldable (Data.Enum.Set.Base.EnumSet w a)
+ Data.Enum.Set.Base: instance (GHC.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum a) => Data.MonoTraversable.MonoFunctor (Data.Enum.Set.Base.EnumSet w a)
+ Data.Enum.Set.Base: instance (GHC.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum a) => Data.MonoTraversable.MonoTraversable (Data.Enum.Set.Base.EnumSet w a)
+ Data.Enum.Set.Base: instance (GHC.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum a) => GHC.Exts.IsList (Data.Enum.Set.Base.EnumSet w a)
+ Data.Enum.Set.Base: instance (GHC.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum a, Data.Aeson.Types.ToJSON.ToJSON a) => Data.Aeson.Types.ToJSON.ToJSON (Data.Enum.Set.Base.EnumSet w a)
+ Data.Enum.Set.Base: instance (GHC.Bits.FiniteBits w, GHC.Num.Num w, GHC.Enum.Enum x, GHC.Show.Show x) => GHC.Show.Show (Data.Enum.Set.Base.EnumSet w x)
+ Data.Enum.Set.Base: instance forall k w (a :: k). GHC.Bits.Bits w => GHC.Base.Monoid (Data.Enum.Set.Base.EnumSet w a)
+ Data.Enum.Set.Base: instance forall k w (a :: k). GHC.Bits.Bits w => GHC.Base.Semigroup (Data.Enum.Set.Base.EnumSet w a)

Files

Data/Enum/Set.hs view
@@ -127,7 +127,8 @@   , toRaw
   ) where
 
-import Prelude hiding (all, any, filter, foldl, foldl1, foldMap, foldr, foldr1, map, maximum, minimum, null, traverse)
+import Prelude hiding (Foldable(..), all, any, filter, map, traverse)
+import Data.Foldable (Foldable)
 
 import Data.Bits
 
Data/Enum/Set/Base.hs view
@@ -125,7 +125,8 @@ import qualified GHC.Exts
 import qualified Data.Foldable as F
 
-import Prelude hiding (all, any, filter, foldl, foldl1, foldMap, foldr, foldr1, map, maximum, minimum, null, traverse)
+import Prelude hiding (Foldable(..), all, any, filter, map, traverse)
+import Data.Foldable (Foldable)
 
 import Control.Applicative (liftA2)
 import Control.DeepSeq (NFData)
README.md view
@@ -1,2 +1,36 @@ # bitwise-enum-Bitwise operations on bounded enumerations.++Efficient sets over bounded enumerations, using bitwise operations based on [containers](https://hackage.haskell.org/package/containers-0.6.0.1/docs/src/Data.IntSet.Internal.html) and [EdisonCore](https://hackage.haskell.org/package/EdisonCore-1.3.2.1/docs/src/Data-Edison-Coll-EnumSet.html). All operations apart from folds are constant-time. In many cases, the compiler may use constant folding to optimize `EnumSet`s away entirely. For example, in the following code:++```hs+import Data.Enum.Set as E++data Foo = A | B | C | D | E | F | G | H deriving (Bounded, Enum, Eq, Ord)++instance E.AsEnumSet Foo++addFoos :: E.EnumSet Foo -> E.EnumSet Foo+addFoos = E.delete A . E.insert B++bar :: E.EnumSet Foo+bar = addFoos $ E.fromFoldable [A, C, E]++barHasA :: Bool+barHasA = E.member A bar+```++With  -O  or  -O2 ,  `bar`  will compile to  `GHC.Types.W# 22##`  and  `barHasA`  will compile to  `GHC.Types.False`.++By default, `Word`s are used as the representation. Other representations may be chosen in the class instance:++```hs+{-# LANGUAGE TypeFamilies #-}++import Data.Enum.Set as E+import Data.Word (Word64)++data Foo = A | B | C | D | E | F | G | H deriving (Bounded, Enum, Eq, Ord, Show)++instance E.AsEnumSet Foo where+    type EnumSetRep Foo = Word64+```
bitwise-enum.cabal view
@@ -1,13 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.33.0.+-- This file has been generated from package.yaml by hpack version 0.35.2. -- -- see: https://github.com/sol/hpack------ hash: 5fdbdf5677b7ae0a0c640e45ae5ba0dc5db8950240db416cd566fb5f90d288d2  name:           bitwise-enum-version:        1.0.1.0+version:        1.0.1.1 synopsis:       Bitwise operations on bounded enumerations description:    Bitwise operations on bounded enumerations.                 .@@ -38,12 +36,12 @@       ./   ghc-options: -Wall -Wcompat -Widentities -Wincomplete-uni-patterns -Wincomplete-record-updates -ferror-spans -funbox-small-strict-fields -O2   build-depends:-      aeson >=0.11 && <1.6+      aeson >=0.11 && <2.3     , array >=0.5.1 && <0.6     , base >=4.5 && <5-    , deepseq >=1.1 && <1.5+    , deepseq >=1.1 && <1.6     , mono-traversable >=1.0.12 && <1.1-    , vector >=0.11 && <0.13+    , vector >=0.11 && <0.14   default-language: Haskell2010  test-suite enumset-test-suite@@ -56,15 +54,15 @@   ghc-options: -Wall -Wcompat -Widentities -Wincomplete-uni-patterns -Wincomplete-record-updates -ferror-spans -funbox-small-strict-fields   build-depends:       QuickCheck >=2.13.2-    , aeson >=0.11 && <1.6+    , aeson >=0.11 && <2.3     , array >=0.5.1 && <0.6     , base     , bitwise-enum-    , deepseq >=1.1 && <1.5+    , deepseq >=1.1 && <1.6     , mono-traversable >=1.0.12 && <1.1     , test-framework >=0.8.2.0     , test-framework-quickcheck2 >=0.3.0.5-    , vector >=0.11 && <0.13+    , vector >=0.11 && <0.14   default-language: Haskell2010  benchmark enumset-benchmarks@@ -76,13 +74,13 @@       benchmarks   ghc-options: -Wall -Wcompat -Widentities -Wincomplete-uni-patterns -Wincomplete-record-updates -ferror-spans -funbox-small-strict-fields -rtsopts -threaded -with-rtsopts=-N -O2   build-depends:-      aeson >=0.11 && <1.6+      aeson >=0.11 && <2.3     , array >=0.5.1 && <0.6     , base     , bitwise-enum-    , deepseq >=1.1 && <1.5+    , deepseq >=1.1 && <1.6     , gauge >=0.2.5     , mono-traversable >=1.0.12 && <1.1-    , vector >=0.11 && <0.13+    , vector >=0.11 && <0.14     , wide-word >=0.1.0.9   default-language: Haskell2010
+ package.yaml view
@@ -0,0 +1,64 @@+name:         bitwise-enum+version:      1.0.1.1+github:       "jnbooth/bitwise-enum"+homepage:     https://github.com/jnbooth/bitwise-enum+bug-reports:  https://github.com/jnbooth/bitwise-enum/issues+author:       "Joshua Booth <joshua.n.booth@gmail.com>"+maintainer:   "Joshua Booth <joshua.n.booth@gmail.com>"+license:      BSD3+license-file: LICENSE+category:     Data, Data Structures, Foreign+synopsis:     "Bitwise operations on bounded enumerations"+description:  |+    Bitwise operations on bounded enumerations.+    .+    ["Data.Enum.Set"] Constant-time sets using bit flags.+    .+    ["Data.Enum.Memo"] Constant-time lookup memoization for functions on enumerated types.++dependencies:+  - aeson >=0.11 && <2.3+  - array >=0.5.1 && <0.6+  - base >=4.5 && <5+  - deepseq >=1.1 && <1.6+  - mono-traversable >=1.0.12 && <1.1+  - vector >=0.11 && <0.14++ghc-options:+  - -Wall+  - -Wcompat+  - -Widentities+  - -Wincomplete-uni-patterns+  - -Wincomplete-record-updates+  - -ferror-spans+  - -funbox-small-strict-fields++library:+  source-dirs: ./+  ghc-options: -O2++benchmarks:+  enumset-benchmarks:+    main: EnumSet.hs+    source-dirs: benchmarks+    dependencies:+      - base+      - bitwise-enum+      - gauge >=0.2.5+      - wide-word >=0.1.0.9+    ghc-options:+      - -rtsopts+      - -threaded+      - -with-rtsopts=-N+      - -O2++tests:+  enumset-test-suite:+    main: set-properties.hs+    source-dirs: tests+    dependencies:+      - base+      - bitwise-enum+      - QuickCheck >=2.13.2+      - test-framework >=0.8.2.0+      - test-framework-quickcheck2 >=0.3.0.5
+ stack.yaml view
@@ -0,0 +1,1 @@+resolver: lts-21.5