module Common where
import qualified Data.Map as M
import qualified Data.Set as S
import Control.Monad (liftM)
type a :⇀ b = M.Map a b
infixl 8 :⇀
type a :× b = (a,b)
infixl 9 :×
upd :: (Ord k) => k :⇀a -> [k :× a] -> k :⇀ a
upd map list = M.union (M.fromList list) map
upd' :: (Ord k, Functor f) => f (k :⇀ a) -> [k :× a] -> f (k :⇀ a)
upd' map list = fmap (`upd` list) map
(↦) :: k -> v -> k :× v
k ↦ v = (k,v)
unionsM :: (Monad m, Ord k) => [m (k :⇀ a)] -> m (k :⇀ a)
unionsM = liftM M.unions . sequence