-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Containers with monoidal accumulation
--   
--   Containers with merging via monoidal accumulation. The <a>Monoid</a>
--   instances provided by the <tt>containers</tt> and
--   <tt>unordered-containers</tt> packages merge structures in a
--   left-biased manner instead of using the underlying monoidal structure
--   of the value.
--   
--   This package wraps the types provided by these packages, but provides
--   <tt>Monoid</tt> instances implemented in terms of the value type's
--   <a>mappend</a>. For instance, the <tt>Monoid</tt> <tt>Map</tt>
--   instance looks like,
--   
--   <pre>
--   instance (Ord k, Monoid a) =&gt; Monoid (MonoidalMap k a)
--   </pre>
@package monoidal-containers
@version 0.3.1.0


-- | This module provides a <a>HashMap</a> variant which uses the value's
--   <a>Monoid</a> instance to accumulate conflicting entries when merging
--   <tt>Map</tt>s.
--   
--   While some functions mirroring those of <a>HashMap</a> are provided
--   here for convenience, more specialized needs will likely want to use
--   either the <a>Newtype</a> or <a>Wrapped</a> instances to manipulate
--   the underlying <tt>Map</tt>.
module Data.HashMap.Monoidal

-- | A <tt>HashMap</tt> with monoidal accumulation
newtype MonoidalHashMap k a
MonoidalHashMap :: HashMap k a -> MonoidalHashMap k a
[getMonoidalHashMap] :: MonoidalHashMap k a -> HashMap k a

-- | <i>O(n*log n)</i>. Return a list of this map's elements. The list is
--   produced lazily. The order of its elements is unspecified.
toList :: MonoidalHashMap k a -> [(k, a)]

-- | <i>O(n*log n)</i>. Construct a map with the supplied mappings. If the
--   list contains duplicate mappings, values will be merged using (mappend
--   newVal oldVal).
fromList :: (Eq k, Hashable k, Monoid a) => [(k, a)] -> MonoidalHashMap k a

-- | <i>O(1)</i>. A map with a single element.
singleton :: (Eq k, Hashable k) => k -> a -> MonoidalHashMap k a

-- | <i>O(1)</i>. The number of elements in the map.
size :: MonoidalHashMap k a -> Int

-- | <i>O(log n)</i>. Is the key a member of the map? See also
--   <a>notMember</a>.
member :: (Eq k, Hashable k) => k -> MonoidalHashMap k a -> Bool

-- | <i>O(log n)</i>. Is the key not a member of the map? See also
--   <a>member</a>.
notMember :: (Eq k, Hashable k) => k -> MonoidalHashMap k a -> Bool

-- | <i>O(log n)</i> Return the value to which the specified key is mapped,
--   or <a>Nothing</a> if this map contains no mapping for the key.
lookup :: (Eq k, Hashable k) => k -> MonoidalHashMap k v -> Maybe v

-- | <i>O(log n)</i> Return the value to which the specified key is mapped,
--   or mempty if this map contains no mapping for the key.
lookupM :: (Eq k, Hashable k, Monoid v) => k -> MonoidalHashMap k v -> v

-- | <i>O(n)</i>. Return a list of this map's values. The list is produced
--   lazily.
elems :: MonoidalHashMap k a -> [a]

-- | <i>O(n)</i>. Return all keys of the map in ascending order. Subject to
--   list fusion.
keys :: MonoidalHashMap k a -> [k]

-- | <i>O(log n)</i>. Delete a key and its value from the map. When the key
--   is not a member of the map, the original map is returned.
delete :: (Eq k, Hashable k) => k -> MonoidalHashMap k a -> MonoidalHashMap k a

-- | <i>O(n)</i>. Map a function to each key of a map, if it will result in
--   duplicated mappings, their values will be merged in unspecified order
mapKeys :: (Monoid a, Hashable k, Eq k, Hashable k', Eq k') => (k -> k') -> MonoidalHashMap k a -> MonoidalHashMap k' a

-- | <i>O(log n)</i>. Modify a value on some key with a function, if value
--   under key doesn't exist -- use mempty.
modify :: (Monoid a, Hashable k, Eq k) => (a -> a) -> k -> MonoidalHashMap k a -> MonoidalHashMap k a

-- | <i>O(log n)</i>. Modify a value on some key with a function, providing
--   a default value if that key doesn't exist.
modifyDef :: (Monoid a, Hashable k, Eq k) => a -> (a -> a) -> k -> MonoidalHashMap k a -> MonoidalHashMap k a

-- | <i>O(n)</i> Transform this map by applying a function to every value.
map :: (v1 -> v2) -> MonoidalHashMap k v1 -> MonoidalHashMap k v2

-- | <i>O(n)</i> Filter this map by retaining only elements satisfying a
--   predicate.
filterWithKey :: (k -> v -> Bool) -> MonoidalHashMap k v -> MonoidalHashMap k v
instance (Data.Hashable.Class.Hashable k, GHC.Classes.Eq k, Data.Data.Data a, Data.Data.Data k) => Data.Data.Data (Data.HashMap.Monoidal.MonoidalHashMap k a)
instance Data.Traversable.Traversable (Data.HashMap.Monoidal.MonoidalHashMap k)
instance Data.Foldable.Foldable (Data.HashMap.Monoidal.MonoidalHashMap k)
instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData k) => Control.DeepSeq.NFData (Data.HashMap.Monoidal.MonoidalHashMap k a)
instance (GHC.Classes.Eq a, GHC.Classes.Eq k) => GHC.Classes.Eq (Data.HashMap.Monoidal.MonoidalHashMap k a)
instance GHC.Base.Functor (Data.HashMap.Monoidal.MonoidalHashMap k)
instance (GHC.Read.Read a, GHC.Read.Read k, Data.Hashable.Class.Hashable k, GHC.Classes.Eq k) => GHC.Read.Read (Data.HashMap.Monoidal.MonoidalHashMap k a)
instance (GHC.Show.Show a, GHC.Show.Show k) => GHC.Show.Show (Data.HashMap.Monoidal.MonoidalHashMap k a)
instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k) => Control.Lens.At.Ixed (Data.HashMap.Monoidal.MonoidalHashMap k a)
instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k) => Control.Lens.At.At (Data.HashMap.Monoidal.MonoidalHashMap k a)
instance Control.Lens.Each.Each (Data.HashMap.Monoidal.MonoidalHashMap k a) (Data.HashMap.Monoidal.MonoidalHashMap k b) a b
instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k) => Control.Lens.Indexed.FunctorWithIndex k (Data.HashMap.Monoidal.MonoidalHashMap k)
instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k) => Control.Lens.Indexed.FoldableWithIndex k (Data.HashMap.Monoidal.MonoidalHashMap k)
instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k) => Control.Lens.Indexed.TraversableWithIndex k (Data.HashMap.Monoidal.MonoidalHashMap k)
instance Control.Lens.Empty.AsEmpty (Data.HashMap.Monoidal.MonoidalHashMap k a)
instance Control.Lens.Wrapped.Wrapped (Data.HashMap.Monoidal.MonoidalHashMap k a)
instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k, Data.Semigroup.Semigroup a) => Data.Semigroup.Semigroup (Data.HashMap.Monoidal.MonoidalHashMap k a)
instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k, GHC.Base.Monoid a) => GHC.Base.Monoid (Data.HashMap.Monoidal.MonoidalHashMap k a)
instance Control.Newtype.Newtype (Data.HashMap.Monoidal.MonoidalHashMap k a) (Data.HashMap.Base.HashMap k a)
instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k, GHC.Base.Monoid a) => GHC.Exts.IsList (Data.HashMap.Monoidal.MonoidalHashMap k a)


-- | This module provides a <a>Map</a> variant which uses the value's
--   <a>Monoid</a> instance to accumulate conflicting entries when merging
--   <tt>Map</tt>s.
--   
--   While some functions mirroring those of <a>Map</a> are provided here
--   for convenience, more specialized needs will likely want to use either
--   the <a>Newtype</a> or <a>Wrapped</a> instances to manipulate the
--   underlying <tt>Map</tt>.
module Data.Map.Monoidal

-- | A <tt>Map</tt> with monoidal accumulation
newtype MonoidalMap k a
MonoidalMap :: Map k a -> MonoidalMap k a
[getMonoidalMap] :: MonoidalMap k a -> Map k a

-- | <i>O(1)</i>. A map with a single element.
singleton :: Ord k => k -> a -> MonoidalMap k a

-- | <i>O(1)</i>. The number of elements in the map.
size :: MonoidalMap k a -> Int

-- | <i>O(log n)</i>. Is the key a member of the map? See also
--   <a>notMember</a>.
member :: Ord k => k -> MonoidalMap k a -> Bool

-- | <i>O(log n)</i>. Is the key not a member of the map? See also
--   <a>member</a>.
notMember :: Ord k => k -> MonoidalMap k a -> Bool

-- | <i>O(log n)</i>. The expression <tt>(<a>findWithDefault</a> def k
--   map)</tt> returns the value at key <tt>k</tt> or returns default value
--   <tt>def</tt> when the key is not in the map.
findWithDefault :: Ord k => a -> k -> MonoidalMap k a -> a

-- | <i>O(n)</i>. Return all elements of the map and their keys
assocs :: MonoidalMap k a -> [(k, a)]

-- | <i>O(n)</i>. Return all elements of the map in the ascending order of
--   their keys. Subject to list fusion.
elems :: MonoidalMap k a -> [a]

-- | <i>O(n)</i>. Return all keys of the map in ascending order. Subject to
--   list fusion.
keys :: MonoidalMap k a -> [k]
instance (GHC.Classes.Ord k, Data.Data.Data a, Data.Data.Data k) => Data.Data.Data (Data.Map.Monoidal.MonoidalMap k a)
instance Data.Traversable.Traversable (Data.Map.Monoidal.MonoidalMap k)
instance Data.Foldable.Foldable (Data.Map.Monoidal.MonoidalMap k)
instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData k) => Control.DeepSeq.NFData (Data.Map.Monoidal.MonoidalMap k a)
instance (GHC.Classes.Ord a, GHC.Classes.Ord k) => GHC.Classes.Ord (Data.Map.Monoidal.MonoidalMap k a)
instance (GHC.Classes.Eq a, GHC.Classes.Eq k) => GHC.Classes.Eq (Data.Map.Monoidal.MonoidalMap k a)
instance GHC.Base.Functor (Data.Map.Monoidal.MonoidalMap k)
instance (GHC.Read.Read a, GHC.Read.Read k, GHC.Classes.Ord k) => GHC.Read.Read (Data.Map.Monoidal.MonoidalMap k a)
instance (GHC.Show.Show a, GHC.Show.Show k) => GHC.Show.Show (Data.Map.Monoidal.MonoidalMap k a)
instance GHC.Classes.Ord k => Control.Lens.At.Ixed (Data.Map.Monoidal.MonoidalMap k a)
instance GHC.Classes.Ord k => Control.Lens.At.At (Data.Map.Monoidal.MonoidalMap k a)
instance Control.Lens.Each.Each (Data.Map.Monoidal.MonoidalMap k a) (Data.Map.Monoidal.MonoidalMap k b) a b
instance GHC.Classes.Ord k => Control.Lens.Indexed.FunctorWithIndex k (Data.Map.Monoidal.MonoidalMap k)
instance GHC.Classes.Ord k => Control.Lens.Indexed.FoldableWithIndex k (Data.Map.Monoidal.MonoidalMap k)
instance GHC.Classes.Ord k => Control.Lens.Indexed.TraversableWithIndex k (Data.Map.Monoidal.MonoidalMap k)
instance GHC.Classes.Ord k => Control.Lens.Traversal.TraverseMin k (Data.Map.Monoidal.MonoidalMap k)
instance GHC.Classes.Ord k => Control.Lens.Traversal.TraverseMax k (Data.Map.Monoidal.MonoidalMap k)
instance Control.Lens.Empty.AsEmpty (Data.Map.Monoidal.MonoidalMap k a)
instance Control.Lens.Wrapped.Wrapped (Data.Map.Monoidal.MonoidalMap k a)
instance (GHC.Classes.Ord k, Data.Semigroup.Semigroup a) => Data.Semigroup.Semigroup (Data.Map.Monoidal.MonoidalMap k a)
instance (GHC.Classes.Ord k, GHC.Base.Monoid a) => GHC.Base.Monoid (Data.Map.Monoidal.MonoidalMap k a)
instance Control.Newtype.Newtype (Data.Map.Monoidal.MonoidalMap k a) (Data.Map.Internal.Map k a)
instance (GHC.Classes.Ord k, GHC.Base.Monoid a) => GHC.Exts.IsList (Data.Map.Monoidal.MonoidalMap k a)


-- | This module provides a <a>Map</a> variant which uses the value's
--   <a>Monoid</a> instance to accumulate conflicting entries when merging
--   <tt>Map</tt>s.
--   
--   While some functions mirroring those of <a>Map</a> are provided here
--   for convenience, more specialized needs will likely want to use either
--   the <a>Newtype</a> or <a>Wrapped</a> instances to manipulate the
--   underlying <tt>Map</tt>.
module Data.Map.Monoidal.Strict

-- | A <tt>Map</tt> with monoidal accumulation
newtype MonoidalMap k a
MonoidalMap :: Map k a -> MonoidalMap k a
[getMonoidalMap] :: MonoidalMap k a -> Map k a

-- | <i>O(1)</i>. A map with a single element.
singleton :: Ord k => k -> a -> MonoidalMap k a

-- | <i>O(1)</i>. The number of elements in the map.
size :: MonoidalMap k a -> Int

-- | <i>O(log n)</i>. Is the key a member of the map? See also
--   <a>notMember</a>.
member :: Ord k => k -> MonoidalMap k a -> Bool

-- | <i>O(log n)</i>. Is the key not a member of the map? See also
--   <a>member</a>.
notMember :: Ord k => k -> MonoidalMap k a -> Bool

-- | <i>O(log n)</i>. The expression <tt>(<a>findWithDefault</a> def k
--   map)</tt> returns the value at key <tt>k</tt> or returns default value
--   <tt>def</tt> when the key is not in the map.
findWithDefault :: Ord k => a -> k -> MonoidalMap k a -> a

-- | <i>O(n)</i>. Return all elements of the map and their keys
assocs :: MonoidalMap k a -> [(k, a)]

-- | <i>O(n)</i>. Return all elements of the map in the ascending order of
--   their keys. Subject to list fusion.
elems :: MonoidalMap k a -> [a]

-- | <i>O(n)</i>. Return all keys of the map in ascending order. Subject to
--   list fusion.
keys :: MonoidalMap k a -> [k]
instance (GHC.Classes.Ord k, Data.Data.Data a, Data.Data.Data k) => Data.Data.Data (Data.Map.Monoidal.Strict.MonoidalMap k a)
instance Data.Traversable.Traversable (Data.Map.Monoidal.Strict.MonoidalMap k)
instance Data.Foldable.Foldable (Data.Map.Monoidal.Strict.MonoidalMap k)
instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData k) => Control.DeepSeq.NFData (Data.Map.Monoidal.Strict.MonoidalMap k a)
instance (GHC.Classes.Ord a, GHC.Classes.Ord k) => GHC.Classes.Ord (Data.Map.Monoidal.Strict.MonoidalMap k a)
instance (GHC.Classes.Eq a, GHC.Classes.Eq k) => GHC.Classes.Eq (Data.Map.Monoidal.Strict.MonoidalMap k a)
instance GHC.Base.Functor (Data.Map.Monoidal.Strict.MonoidalMap k)
instance (GHC.Read.Read a, GHC.Read.Read k, GHC.Classes.Ord k) => GHC.Read.Read (Data.Map.Monoidal.Strict.MonoidalMap k a)
instance (GHC.Show.Show a, GHC.Show.Show k) => GHC.Show.Show (Data.Map.Monoidal.Strict.MonoidalMap k a)
instance GHC.Classes.Ord k => Control.Lens.At.Ixed (Data.Map.Monoidal.Strict.MonoidalMap k a)
instance GHC.Classes.Ord k => Control.Lens.At.At (Data.Map.Monoidal.Strict.MonoidalMap k a)
instance Control.Lens.Each.Each (Data.Map.Monoidal.Strict.MonoidalMap k a) (Data.Map.Monoidal.Strict.MonoidalMap k b) a b
instance GHC.Classes.Ord k => Control.Lens.Indexed.FunctorWithIndex k (Data.Map.Monoidal.Strict.MonoidalMap k)
instance GHC.Classes.Ord k => Control.Lens.Indexed.FoldableWithIndex k (Data.Map.Monoidal.Strict.MonoidalMap k)
instance GHC.Classes.Ord k => Control.Lens.Indexed.TraversableWithIndex k (Data.Map.Monoidal.Strict.MonoidalMap k)
instance GHC.Classes.Ord k => Control.Lens.Traversal.TraverseMin k (Data.Map.Monoidal.Strict.MonoidalMap k)
instance GHC.Classes.Ord k => Control.Lens.Traversal.TraverseMax k (Data.Map.Monoidal.Strict.MonoidalMap k)
instance Control.Lens.Empty.AsEmpty (Data.Map.Monoidal.Strict.MonoidalMap k a)
instance Control.Lens.Wrapped.Wrapped (Data.Map.Monoidal.Strict.MonoidalMap k a)
instance (GHC.Classes.Ord k, Data.Semigroup.Semigroup a) => Data.Semigroup.Semigroup (Data.Map.Monoidal.Strict.MonoidalMap k a)
instance (GHC.Classes.Ord k, Data.Semigroup.Semigroup a, GHC.Base.Monoid a) => GHC.Base.Monoid (Data.Map.Monoidal.Strict.MonoidalMap k a)
instance Control.Newtype.Newtype (Data.Map.Monoidal.Strict.MonoidalMap k a) (Data.Map.Internal.Map k a)
instance (GHC.Classes.Ord k, GHC.Base.Monoid a) => GHC.Exts.IsList (Data.Map.Monoidal.Strict.MonoidalMap k a)
