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 +2/−1
- Data/Enum/Set/Base.hs +2/−1
- README.md +35/−1
- bitwise-enum.cabal +11/−13
- package.yaml +64/−0
- stack.yaml +1/−0
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