{-# LANGUAGE MultiParamTypeClasses #-} module Data.Monoid.IntMap ( module Data.Monoid.Reducer , UnionWith(getUnionWith) ) where import Data.Monoid.Reducer (Reducer, unit, cons, snoc, Monoid, mappend, mempty) import Data.IntMap newtype UnionWith m = UnionWith { getUnionWith :: IntMap m } instance Monoid m => Monoid (UnionWith m) where mempty = UnionWith empty UnionWith a `mappend` UnionWith b = UnionWith (unionWith mappend a b) instance Monoid m => Reducer (IntMap m) (UnionWith m) where unit = UnionWith