monoidal-containers-0.1.2.4: Containers with monoidal accumulation

Safe HaskellNone
LanguageHaskell2010

Data.HashMap.Monoidal

Contents

Description

This module provides a HashMap variant which uses the value's Monoid instance to accumulate conflicting entries when merging Maps.

While some functions mirroring those of HashMap are provided here for convenience, more specialized needs will likely want to use either the Newtype or Wrapped instances to manipulate the underlying Map.

Synopsis

Documentation

data MonoidalHashMap k a Source #

A HashMap with monoidal accumulation

Instances

(Eq k, Hashable k) => FunctorWithIndex k (MonoidalHashMap k) Source # 

Methods

imap :: (k -> a -> b) -> MonoidalHashMap k a -> MonoidalHashMap k b #

imapped :: (Indexable k p, Settable f) => p a (f b) -> MonoidalHashMap k a -> f (MonoidalHashMap k b) #

(Eq k, Hashable k) => FoldableWithIndex k (MonoidalHashMap k) Source # 

Methods

ifoldMap :: Monoid m => (k -> a -> m) -> MonoidalHashMap k a -> m #

ifolded :: (Indexable k p, Contravariant f, Applicative f) => p a (f a) -> MonoidalHashMap k a -> f (MonoidalHashMap k a) #

ifoldr :: (k -> a -> b -> b) -> b -> MonoidalHashMap k a -> b #

ifoldl :: (k -> b -> a -> b) -> b -> MonoidalHashMap k a -> b #

ifoldr' :: (k -> a -> b -> b) -> b -> MonoidalHashMap k a -> b #

ifoldl' :: (k -> b -> a -> b) -> b -> MonoidalHashMap k a -> b #

(Eq k, Hashable k) => TraversableWithIndex k (MonoidalHashMap k) Source # 

Methods

itraverse :: Applicative f => (k -> a -> f b) -> MonoidalHashMap k a -> f (MonoidalHashMap k b) #

itraversed :: (Indexable k p, Applicative f) => p a (f b) -> MonoidalHashMap k a -> f (MonoidalHashMap k b) #

Functor (MonoidalHashMap k) Source # 

Methods

fmap :: (a -> b) -> MonoidalHashMap k a -> MonoidalHashMap k b #

(<$) :: a -> MonoidalHashMap k b -> MonoidalHashMap k a #

Foldable (MonoidalHashMap k) Source # 

Methods

fold :: Monoid m => MonoidalHashMap k m -> m #

foldMap :: Monoid m => (a -> m) -> MonoidalHashMap k a -> m #

foldr :: (a -> b -> b) -> b -> MonoidalHashMap k a -> b #

foldr' :: (a -> b -> b) -> b -> MonoidalHashMap k a -> b #

foldl :: (b -> a -> b) -> b -> MonoidalHashMap k a -> b #

foldl' :: (b -> a -> b) -> b -> MonoidalHashMap k a -> b #

foldr1 :: (a -> a -> a) -> MonoidalHashMap k a -> a #

foldl1 :: (a -> a -> a) -> MonoidalHashMap k a -> a #

toList :: MonoidalHashMap k a -> [a] #

null :: MonoidalHashMap k a -> Bool #

length :: MonoidalHashMap k a -> Int #

elem :: Eq a => a -> MonoidalHashMap k a -> Bool #

maximum :: Ord a => MonoidalHashMap k a -> a #

minimum :: Ord a => MonoidalHashMap k a -> a #

sum :: Num a => MonoidalHashMap k a -> a #

product :: Num a => MonoidalHashMap k a -> a #

Traversable (MonoidalHashMap k) Source # 

Methods

traverse :: Applicative f => (a -> f b) -> MonoidalHashMap k a -> f (MonoidalHashMap k b) #

sequenceA :: Applicative f => MonoidalHashMap k (f a) -> f (MonoidalHashMap k a) #

mapM :: Monad m => (a -> m b) -> MonoidalHashMap k a -> m (MonoidalHashMap k b) #

sequence :: Monad m => MonoidalHashMap k (m a) -> m (MonoidalHashMap k a) #

(Eq k, Hashable k, Monoid a) => IsList (MonoidalHashMap k a) Source # 

Associated Types

type Item (MonoidalHashMap k a) :: * #

(Eq k, Eq a) => Eq (MonoidalHashMap k a) Source # 
(Eq k, Data k, Data a, Hashable k) => Data (MonoidalHashMap k a) Source # 

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> MonoidalHashMap k a -> c (MonoidalHashMap k a) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (MonoidalHashMap k a) #

toConstr :: MonoidalHashMap k a -> Constr #

dataTypeOf :: MonoidalHashMap k a -> DataType #

dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c (MonoidalHashMap k a)) #

dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (MonoidalHashMap k a)) #

gmapT :: (forall b. Data b => b -> b) -> MonoidalHashMap k a -> MonoidalHashMap k a #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> MonoidalHashMap k a -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> MonoidalHashMap k a -> r #

gmapQ :: (forall d. Data d => d -> u) -> MonoidalHashMap k a -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> MonoidalHashMap k a -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> MonoidalHashMap k a -> m (MonoidalHashMap k a) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> MonoidalHashMap k a -> m (MonoidalHashMap k a) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> MonoidalHashMap k a -> m (MonoidalHashMap k a) #

(Eq k, Read k, Read a, Hashable k) => Read (MonoidalHashMap k a) Source # 
(Show k, Show a) => Show (MonoidalHashMap k a) Source # 
(Eq k, Hashable k, Monoid a) => Monoid (MonoidalHashMap k a) Source # 
(NFData k, NFData a) => NFData (MonoidalHashMap k a) Source # 

Methods

rnf :: MonoidalHashMap k a -> () #

(Eq k, Hashable k) => Ixed (MonoidalHashMap k a) Source # 
(Eq k, Hashable k) => At (MonoidalHashMap k a) Source # 
AsEmpty (MonoidalHashMap k a) Source # 

Methods

_Empty :: Prism' (MonoidalHashMap k a) () #

Wrapped (MonoidalHashMap k a) Source # 

Associated Types

type Unwrapped (MonoidalHashMap k a) :: * #

Newtype (MonoidalHashMap k a) (HashMap k a) Source # 

Methods

pack :: HashMap k a -> MonoidalHashMap k a #

unpack :: MonoidalHashMap k a -> HashMap k a #

Each (MonoidalHashMap k a) (MonoidalHashMap k b) a b Source # 

Methods

each :: Traversal (MonoidalHashMap k a) (MonoidalHashMap k b) a b #

type Item (MonoidalHashMap k a) = (k, a) Source # 
type Index (MonoidalHashMap k a) = k Source # 
type IxValue (MonoidalHashMap k a) = a Source # 
type Unwrapped (MonoidalHashMap k a) = HashMap k a Source # 

Often-needed functions

singleton :: (Eq k, Hashable k) => k -> a -> MonoidalHashMap k a Source #

O(1). A map with a single element.

size :: MonoidalHashMap k a -> Int Source #

O(1). The number of elements in the map.

member :: (Eq k, Hashable k) => k -> MonoidalHashMap k a -> Bool Source #

O(log n). Is the key a member of the map? See also notMember.

notMember :: (Eq k, Hashable k) => k -> MonoidalHashMap k a -> Bool Source #

O(log n). Is the key not a member of the map? See also member.

lookup :: (Eq k, Hashable k) => k -> MonoidalHashMap k v -> Maybe v Source #

O(log n) Return the value to which the specified key is mapped, or Nothing if this map contains no mapping for the key.

lookupM :: (Eq k, Hashable k, Monoid v) => k -> MonoidalHashMap k v -> v Source #

O(log n) Return the value to which the specified key is mapped, or mempty if this map contains no mapping for the key.

elems :: MonoidalHashMap k a -> [a] Source #

O(n). Return all elements of the map in the ascending order of their keys. Subject to list fusion.

keys :: MonoidalHashMap k a -> [k] Source #

O(n). Return all keys of the map in ascending order. Subject to list fusion.

delete :: (Eq k, Hashable k) => k -> MonoidalHashMap k a -> MonoidalHashMap k a Source #

O(log n). Delete a key and its value from the map. When the key is not a member of the map, the original map is returned.

mapKeys :: (Monoid a, Hashable k, Eq k, Hashable k', Eq k') => (k -> k') -> MonoidalHashMap k a -> MonoidalHashMap k' a Source #

O(n). Map a function to each key of a map

modify :: (Monoid a, Hashable k, Eq k) => (a -> a) -> k -> MonoidalHashMap k a -> MonoidalHashMap k a Source #

O(log n). Modify a value on some key with a function, if value under key doesn't exist -- use mempty.

modifyDef :: (Monoid a, Hashable k, Eq k) => a -> (a -> a) -> k -> MonoidalHashMap k a -> MonoidalHashMap k a Source #

O(log n). Modify a value on some key with a function, providing a default value if that key doesn't exist.