Safe Haskell | Safe |
---|---|

Language | Haskell98 |

This is an implementation of bidirectional multimaps.

- data BiMultiMap a b v
- empty :: BiMultiMap a b v
- singleton :: (Ord a, Ord b, Ord v) => a -> b -> v -> BiMultiMap a b v
- size :: BiMultiMap a b v -> Int
- insert :: (Ord a, Ord b, Ord v) => a -> b -> v -> BiMultiMap a b v -> BiMultiMap a b v
- lookupBy1st :: Ord a => a -> BiMultiMap a b v -> Set (b, v)
- lookupBy2nd :: Ord b => b -> BiMultiMap a b v -> Set (a, v)
- delete :: (Ord a, Ord b, Ord v) => a -> b -> v -> BiMultiMap a b v -> BiMultiMap a b v
- deleteAllBy1st :: (Ord a, Ord b, Ord v) => a -> BiMultiMap a b v -> BiMultiMap a b v
- deleteAllBy2nd :: (Ord a, Ord b, Ord v) => b -> BiMultiMap a b v -> BiMultiMap a b v
- partitionWithKeyBy1st :: (Ord a, Ord b, Ord v) => (a -> Set (b, v) -> Bool) -> BiMultiMap a b v -> (Map a (Set (b, v)), BiMultiMap a b v)
- partitionWithKeyBy2nd :: (Ord a, Ord b, Ord v) => (b -> Set (a, v) -> Bool) -> BiMultiMap a b v -> (Map b (Set (a, v)), BiMultiMap a b v)
- flip :: BiMultiMap a b v -> BiMultiMap b a v

# Documentation

data BiMultiMap a b v Source #

A bidirectional multimaps `BiMultiMap a b v`

is a set of triplets of type
`(a, b, v)`

.

It is possible to lookup values by using either `a`

or `b`

as keys.

empty :: BiMultiMap a b v Source #

The empty bidirectional multimap.

singleton :: (Ord a, Ord b, Ord v) => a -> b -> v -> BiMultiMap a b v Source #

A bidirectional multimap containing a single triplet.

size :: BiMultiMap a b v -> Int Source #

Yields the amount of triplets in the multimap.

insert :: (Ord a, Ord b, Ord v) => a -> b -> v -> BiMultiMap a b v -> BiMultiMap a b v Source #

Inserts a triplet in the multimap.

lookupBy1st :: Ord a => a -> BiMultiMap a b v -> Set (b, v) Source #

Looks up all the triplets whose first component is the given value.

lookupBy2nd :: Ord b => b -> BiMultiMap a b v -> Set (a, v) Source #

Looks up all the triplets whose second component is the given value.

delete :: (Ord a, Ord b, Ord v) => a -> b -> v -> BiMultiMap a b v -> BiMultiMap a b v Source #

Deletes a triplet. It yields the original multimap if the triplet is not present.

deleteAllBy1st :: (Ord a, Ord b, Ord v) => a -> BiMultiMap a b v -> BiMultiMap a b v Source #

Deletes all triplets whose first component is the given value.

deleteAllBy2nd :: (Ord a, Ord b, Ord v) => b -> BiMultiMap a b v -> BiMultiMap a b v Source #

Like `deleteAllBy1st`

but deletes by the second component of the triplets.

partitionWithKeyBy1st :: (Ord a, Ord b, Ord v) => (a -> Set (b, v) -> Bool) -> BiMultiMap a b v -> (Map a (Set (b, v)), BiMultiMap a b v) Source #

Yields the triplets satisfying the given predicate, and a multimap with all this triplets removed.

partitionWithKeyBy2nd :: (Ord a, Ord b, Ord v) => (b -> Set (a, v) -> Bool) -> BiMultiMap a b v -> (Map b (Set (a, v)), BiMultiMap a b v) Source #

Like `partitionWithKeyBy1st`

but the predicates takes the second component
of the triplets as first argument.

flip :: BiMultiMap a b v -> BiMultiMap b a v Source #

Exchange the first and the second components of all triplets.