# multi-containers

A library that provides three multimap variants:

- [`Multimap k a`](https://hackage.haskell.org/package/multi-containers/docs/Data-Multimap.html), a multimap where values of each key form a list.
- [`SetMultimap k a`](https://hackage.haskell.org/package/multi-containers/docs/Data-Multimap-Set.html), a multimap where values of each key form a set.
- [`Table r c a`](https://hackage.haskell.org/package/multi-containers/docs/Data-Multimap-Table.html), a two dimensional table where
  values are indexed by row keys and column keys; it is essentially a multimap where values of each key form a map.

For `Multimap` and `SetMultimap`, there's always at least one value associated with each key in the multimap. Upon removing
the last value of a key, the key itself is removed from the multimap.

For `Table`, similarly, each row key in a table always has at least one value. So does each column key.