enummapset 0.1.0 → 0.2.0
raw patch · 2 files changed
+41/−42 lines, 2 filesdep ~containersPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: containers
API changes (from Hackage documentation)
+ Data.EnumMap: mergeWithKey :: Enum k => (k -> a -> b -> Maybe c) -> (EnumMap k a -> EnumMap k c) -> (EnumMap k b -> EnumMap k c) -> EnumMap k a -> EnumMap k b -> EnumMap k c
- Data.EnumMap: deleteFindMax :: EnumMap k a -> (a, EnumMap k a)
+ Data.EnumMap: deleteFindMax :: Enum k => EnumMap k a -> ((k, a), EnumMap k a)
- Data.EnumMap: deleteFindMin :: EnumMap k a -> (a, EnumMap k a)
+ Data.EnumMap: deleteFindMin :: Enum k => EnumMap k a -> ((k, a), EnumMap k a)
- Data.EnumMap: updateMax :: (a -> a) -> EnumMap k a -> EnumMap k a
+ Data.EnumMap: updateMax :: (a -> Maybe a) -> EnumMap k a -> EnumMap k a
- Data.EnumMap: updateMaxWithKey :: Enum k => (k -> a -> a) -> EnumMap k a -> EnumMap k a
+ Data.EnumMap: updateMaxWithKey :: Enum k => (k -> a -> Maybe a) -> EnumMap k a -> EnumMap k a
- Data.EnumMap: updateMin :: (a -> a) -> EnumMap k a -> EnumMap k a
+ Data.EnumMap: updateMin :: (a -> Maybe a) -> EnumMap k a -> EnumMap k a
- Data.EnumMap: updateMinWithKey :: Enum k => (k -> a -> a) -> EnumMap k a -> EnumMap k a
+ Data.EnumMap: updateMinWithKey :: Enum k => (k -> a -> Maybe a) -> EnumMap k a -> EnumMap k a
Files
- Data/EnumMap.hs +39/−40
- enummapset.cabal +2/−2
Data/EnumMap.hs view
@@ -73,6 +73,9 @@ , intersectionWith , intersectionWithKey + -- ** Universal combining function+ , mergeWithKey+ -- * Traversal -- ** Map , map@@ -150,6 +153,7 @@ import Data.EnumSet ( EnumSet ) import qualified Data.EnumSet as EnumSet +import Control.Arrow ( first, second, (***) ) import Data.Foldable ( Foldable ) import Data.Monoid ( Monoid ) import Data.Traversable ( Traversable )@@ -187,20 +191,8 @@ -- A few useful functions used through the module. Not exported. -- -fstToEnum :: (Enum k) => (Int, a) -> (k, a)-fstToEnum (i, a) = (toEnum i, a)-{-# INLINE fstToEnum #-}--fstFromEnum :: (Enum k) => (k, a) -> (Int, a)-fstFromEnum (i, a) = (fromEnum i, a)-{-# INLINE fstFromEnum #-}--sndWrap :: (a, IntMap b) -> (a, EnumMap k b)-sndWrap (a, im) = (a, EnumMap im)-{-# INLINE sndWrap #-}- pairWrap :: (IntMap a, IntMap b) -> (EnumMap k a, EnumMap k b)-pairWrap (im1, im2) = (EnumMap im1, EnumMap im2)+pairWrap = EnumMap *** EnumMap {-# INLINE pairWrap #-} --@@ -260,7 +252,7 @@ {-# INLINE insertWithKey #-} insertLookupWithKey :: (Enum k) => (k -> a -> a -> a) -> k -> a -> EnumMap k a -> (Maybe a, EnumMap k a)-insertLookupWithKey f k a = sndWrap . I.insertLookupWithKey (f . toEnum) (fromEnum k) a . unWrap+insertLookupWithKey f k a = second EnumMap . I.insertLookupWithKey (f . toEnum) (fromEnum k) a . unWrap {-# INLINE insertLookupWithKey #-} delete :: (Enum k) => k -> EnumMap k a -> EnumMap k a@@ -284,7 +276,7 @@ {-# INLINE updateWithKey #-} updateLookupWithKey :: (Enum k) => (k -> a -> Maybe a) -> k -> EnumMap k a -> (Maybe a,EnumMap k a)-updateLookupWithKey f k = sndWrap . I.updateLookupWithKey (f . toEnum) (fromEnum k) . unWrap+updateLookupWithKey f k = second EnumMap . I.updateLookupWithKey (f . toEnum) (fromEnum k) . unWrap {-# INLINE updateLookupWithKey #-} alter :: (Enum k) => (Maybe a -> Maybe a) -> k -> EnumMap k a -> EnumMap k a@@ -335,11 +327,18 @@ intersectionWithKey f (EnumMap im1) (EnumMap im2) = EnumMap $ I.intersectionWithKey (f . toEnum) im1 im2 {-# INLINE intersectionWithKey #-} -updateMinWithKey :: (Enum k) => (k -> a -> a) -> EnumMap k a -> EnumMap k a+mergeWithKey :: (Enum k) => (k -> a -> b -> Maybe c) ->+ (EnumMap k a -> EnumMap k c) -> (EnumMap k b -> EnumMap k c) ->+ EnumMap k a -> EnumMap k b -> EnumMap k c+mergeWithKey f ga gb = \ ma mb -> EnumMap $+ I.mergeWithKey (f . toEnum) (unWrap . ga . EnumMap) (unWrap . gb . EnumMap) (unWrap ma) (unWrap mb)+{-# INLINE mergeWithKey #-}++updateMinWithKey :: (Enum k) => (k -> a -> Maybe a) -> EnumMap k a -> EnumMap k a updateMinWithKey f = EnumMap . I.updateMinWithKey (f . toEnum) . unWrap {-# INLINE updateMinWithKey #-} -updateMaxWithKey :: (Enum k) => (k -> a -> a) -> EnumMap k a -> EnumMap k a+updateMaxWithKey :: (Enum k) => (k -> a -> Maybe a) -> EnumMap k a -> EnumMap k a updateMaxWithKey f = EnumMap . I.updateMaxWithKey (f . toEnum) . unWrap {-# INLINE updateMaxWithKey #-} @@ -355,36 +354,36 @@ wrap ((i, a), imap) = ((toEnum i, a), EnumMap imap) {-# INLINE minViewWithKey #-} -updateMax :: (a -> a) -> EnumMap k a -> EnumMap k a+updateMax :: (a -> Maybe a) -> EnumMap k a -> EnumMap k a updateMax f = EnumMap . I.updateMax f . unWrap {-# INLINE updateMax #-} -updateMin :: (a -> a) -> EnumMap k a -> EnumMap k a+updateMin :: (a -> Maybe a) -> EnumMap k a -> EnumMap k a updateMin f = EnumMap . I.updateMin f . unWrap {-# INLINE updateMin #-} maxView :: EnumMap k a -> Maybe (a, EnumMap k a)-maxView = fmap sndWrap . I.maxView . unWrap+maxView = fmap (second EnumMap) . I.maxView . unWrap {-# INLINE maxView #-} minView :: EnumMap k a -> Maybe (a, EnumMap k a)-minView = fmap sndWrap . I.minView . unWrap+minView = fmap (second EnumMap) . I.minView . unWrap {-# INLINE minView #-} -deleteFindMax :: EnumMap k a -> (a, EnumMap k a)-deleteFindMax = sndWrap . I.deleteFindMax . unWrap+deleteFindMax :: (Enum k) => EnumMap k a -> ((k, a), EnumMap k a)+deleteFindMax = (first toEnum *** EnumMap) . I.deleteFindMax . unWrap {-# INLINE deleteFindMax #-} -deleteFindMin :: EnumMap k a -> (a, EnumMap k a)-deleteFindMin = sndWrap . I.deleteFindMin . unWrap+deleteFindMin :: (Enum k) => EnumMap k a -> ((k, a), EnumMap k a)+deleteFindMin = (first toEnum *** EnumMap) . I.deleteFindMin . unWrap {-# INLINE deleteFindMin #-} findMin :: (Enum k) => EnumMap k a -> (k, a)-findMin = fstToEnum . I.findMin . unWrap+findMin = first toEnum . I.findMin . unWrap {-# INLINE findMin #-} findMax :: (Enum k) => EnumMap k a -> (k, a)-findMax = fstToEnum . I.findMax . unWrap+findMax = first toEnum . I.findMax . unWrap {-# INLINE findMax #-} deleteMin :: EnumMap k a -> EnumMap k a@@ -420,15 +419,15 @@ {-# INLINE mapWithKey #-} mapAccum :: (a -> b -> (a, c)) -> a -> EnumMap k b -> (a, EnumMap k c)-mapAccum f a = sndWrap . I.mapAccum f a . unWrap+mapAccum f a = second EnumMap . I.mapAccum f a . unWrap {-# INLINE mapAccum #-} mapAccumWithKey :: (Enum k) => (a -> k -> b -> (a, c)) -> a -> EnumMap k b -> (a, EnumMap k c)-mapAccumWithKey f a = sndWrap . I.mapAccumWithKey (\b -> f b . toEnum) a . unWrap+mapAccumWithKey f a = second EnumMap . I.mapAccumWithKey (\b -> f b . toEnum) a . unWrap {-# INLINE mapAccumWithKey #-} mapAccumRWithKey :: (Enum k) => (a -> k -> b -> (a, c)) -> a -> EnumMap k b -> (a, EnumMap k c)-mapAccumRWithKey f a = sndWrap . I.mapAccumRWithKey (\b -> f b . toEnum) a . unWrap+mapAccumRWithKey f a = second EnumMap . I.mapAccumRWithKey (\b -> f b . toEnum) a . unWrap {-# INLINE mapAccumRWithKey #-} filter :: (a -> Bool) -> EnumMap k a -> EnumMap k a@@ -494,41 +493,41 @@ {-# INLINE keysSet #-} assocs :: (Enum k) => EnumMap k a -> [(k, a)]-assocs = P.map fstToEnum . I.assocs . unWrap+assocs = P.map (first toEnum) . I.assocs . unWrap {-# INLINE assocs #-} toList :: (Enum k) => EnumMap k a -> [(k, a)]-toList = P.map fstToEnum . I.toList . unWrap+toList = P.map (first toEnum) . I.toList . unWrap {-# INLINE toList #-} toAscList :: (Enum k) => EnumMap k a -> [(k, a)]-toAscList = P.map fstToEnum . I.toAscList . unWrap+toAscList = P.map (first toEnum) . I.toAscList . unWrap {-# INLINE toAscList #-} fromList :: (Enum k) => [(k, a)] -> EnumMap k a-fromList = EnumMap . I.fromList . P.map fstFromEnum+fromList = EnumMap . I.fromList . P.map (first fromEnum) {-# INLINE fromList #-} fromListWith :: (Enum k) => (a -> a -> a) -> [(k, a)] -> EnumMap k a-fromListWith f = EnumMap . I.fromListWith f . P.map fstFromEnum+fromListWith f = EnumMap . I.fromListWith f . P.map (first fromEnum) {-# INLINE fromListWith #-} fromListWithKey :: (Enum k) => (k -> a -> a -> a) -> [(k, a)] -> EnumMap k a-fromListWithKey f = EnumMap . I.fromListWithKey (f . toEnum) . P.map fstFromEnum+fromListWithKey f = EnumMap . I.fromListWithKey (f . toEnum) . P.map (first fromEnum) {-# INLINE fromListWithKey #-} fromAscList :: (Enum k) => [(k, a)] -> EnumMap k a-fromAscList = EnumMap . I.fromAscList . P.map fstFromEnum+fromAscList = EnumMap . I.fromAscList . P.map (first fromEnum) {-# INLINE fromAscList #-} fromAscListWith :: (Enum k) => (a -> a -> a) -> [(k, a)] -> EnumMap k a-fromAscListWith f = EnumMap . I.fromAscListWith f . P.map fstFromEnum+fromAscListWith f = EnumMap . I.fromAscListWith f . P.map (first fromEnum) {-# INLINE fromAscListWith #-} fromAscListWithKey :: (Enum k) => (k -> a -> a -> a) -> [(k, a)] -> EnumMap k a-fromAscListWithKey f = EnumMap . I.fromAscListWithKey (f . toEnum) . P.map fstFromEnum+fromAscListWithKey f = EnumMap . I.fromAscListWithKey (f . toEnum) . P.map (first fromEnum) {-# INLINE fromAscListWithKey #-} fromDistinctAscList :: (Enum k) => [(k, a)] -> EnumMap k a-fromDistinctAscList = EnumMap . I.fromDistinctAscList . P.map fstFromEnum+fromDistinctAscList = EnumMap . I.fromDistinctAscList . P.map (first fromEnum) {-# INLINE fromDistinctAscList #-}
enummapset.cabal view
@@ -1,5 +1,5 @@ name: enummapset-version: 0.1.0+version: 0.2.0 synopsis: IntMap and IntSet with Enum keys/elements. description: This package contains simple wrappers around 'Data.IntMap' and 'Data.IntSet' with 'Enum' keys and elements respectively.@@ -28,6 +28,6 @@ build-depends: base < 5,- containers >= 0.3 && < 0.5+ containers >= 0.5 && < 0.6 ghc-options: -Wall