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