Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Generic multimap module.
- data Multimap k c v
- class Foldable c => Collection c
- null :: Multimap k c v -> Bool
- size :: Collection c => Multimap k c v -> Int
- empty :: Multimap k c v
- singleton :: (Collection c, Ord k) => k -> v -> Multimap k c v
- fromMap :: Collection c => Map k (c v) -> Multimap k c v
- fromList :: (Collection c, Semigroup (c v), Ord k) => [(k, v)] -> Multimap k c v
- fromCollectionsList :: (Collection c, Semigroup (c v), Ord k) => [(k, c v)] -> Multimap k c v
- (!) :: (Collection c, Ord k) => Multimap k c v -> k -> c v
- insert :: (Ord k, Collection c, Semigroup (c v)) => k -> v -> Multimap k c v -> Multimap k c v
- insertAll :: (Ord k, Semigroup (c v)) => k -> c v -> Multimap k c v -> Multimap k c v
- deleteAll :: Ord k => k -> Multimap k c v -> Multimap k c v
- filter :: (Collection c, Semigroup (c v), Ord k) => (v -> Bool) -> Multimap k c v -> Multimap k c v
- filterWithKey :: (Collection c, Semigroup (c v), Ord k) => (k -> v -> Bool) -> Multimap k c v -> Multimap k c v
- union :: (Ord k, Semigroup (c v)) => Multimap k c v -> Multimap k c v -> Multimap k c v
- toMap :: Multimap k c v -> Map k (c v)
- toMapWith :: (c v -> a) -> Multimap k c v -> Map k a
- toList :: Collection c => Multimap k c v -> [(k, v)]
- keysSet :: Multimap k c v -> Set k
- lift1 :: (Ord k, Collection c) => (c v -> c v) -> k -> Multimap k c v -> Multimap k c v
Documentation
Functor c => Functor (Multimap k c) Source # | |
(Eq (c v), Eq k) => Eq (Multimap k c v) Source # | |
(Ord (c v), Ord k) => Ord (Multimap k c v) Source # | |
(Read (c v), Read k, Ord k) => Read (Multimap k c v) Source # | |
(Show (c v), Show k) => Show (Multimap k c v) Source # | |
(Ord k, Semigroup (c v)) => Semigroup (Multimap k c v) Source # | |
(Ord k, Semigroup (c v)) => Monoid (Multimap k c v) Source # | |
class Foldable c => Collection c Source #
Lower bound for multimap values.
An alternative could have been to use Applicative
but that would have
precluded common implementations (e.g. Set
).
Tests
Construction
fromList :: (Collection c, Semigroup (c v), Ord k) => [(k, v)] -> Multimap k c v Source #
Build a multimap from a list.
This method uses insertWith
and semigroup's <>
operator. This might
not be what you want, for example in the case of lists (where the order of
the values will be inverted). For ordered collections, prefer
fromCollectionsList
.
fromCollectionsList :: (Collection c, Semigroup (c v), Ord k) => [(k, c v)] -> Multimap k c v Source #
Build a multimap from a list of key-collection pairs.
Access
insert :: (Ord k, Collection c, Semigroup (c v)) => k -> v -> Multimap k c v -> Multimap k c v Source #
Modification
filter :: (Collection c, Semigroup (c v), Ord k) => (v -> Bool) -> Multimap k c v -> Multimap k c v Source #
filterWithKey :: (Collection c, Semigroup (c v), Ord k) => (k -> v -> Bool) -> Multimap k c v -> Multimap k c v Source #
Extraction
toList :: Collection c => Multimap k c v -> [(k, v)] Source #
Other
lift1 :: (Ord k, Collection c) => (c v -> c v) -> k -> Multimap k c v -> Multimap k c v Source #
Lift an operation over a collection of values into a multimap operation.
Sample use to filter even values from a SetMultimap
:
let ms = fromList [(a
, 1), (a
, 2)] :: SetMultimap Char Int lift1 (Set.filter even)a
ms == fromList [(a
, 1)]