1{- |
2   Module      : Text.Pandoc.Readers.Odt.Generic.SetMap
3   Copyright   : Copyright (C) 2015 Martin Linnemann
4   License     : GNU GPL, version 2 or above
5
6   Maintainer  : Martin Linnemann <theCodingMarlin@googlemail.com>
7   Stability   : alpha
8   Portability : portable
9
10A map of values to sets of values.
11-}
12
13module Text.Pandoc.Readers.Odt.Generic.SetMap where
14
15import qualified Data.Map as M
16import qualified Data.Set as S
17
18type SetMap k v = M.Map k (S.Set v)
19
20empty :: SetMap k v
21empty = M.empty
22
23fromList :: (Ord k, Ord v) => [(k,v)] -> SetMap k v
24fromList = foldr (uncurry insert) empty
25
26insert :: (Ord k, Ord v) => k -> v -> SetMap k v -> SetMap k v
27insert key value setMap = M.insertWith S.union key (S.singleton value) setMap
28
29union3 :: (Ord k) => SetMap k v -> SetMap k v -> SetMap k v -> SetMap k v
30union3 sm1 sm2 sm3 = sm1 `M.union` sm2 `M.union` sm3
31