deep merge maps
[pdns-pipe-nmc.git] / NmcDom.hs
index adb378999a064e81ce759d9b3d3e7c61a0dd34a0..7eb4ee6d1f83e6906a769923d46ae1fcaf97e571 100644 (file)
--- a/NmcDom.hs
+++ b/NmcDom.hs
@@ -13,7 +13,7 @@ import Data.Text (Text, unpack)
 import Data.List as L (union)
 import Data.List.Split
 import Data.Char
-import Data.Map as M (Map, lookup, delete, size, union)
+import Data.Map as M (Map, lookup, delete, size, unionWith)
 import Data.Vector (toList,(!),length, singleton)
 import Control.Applicative ((<$>), (<*>), empty, pure)
 import Data.Aeson
@@ -37,8 +37,8 @@ obj .:/ key = case H.lookup key obj of
 class Mergeable a where
         merge :: a -> a -> a -- bias towads second arg
 
-instance Ord k => Mergeable (Map k a) where
-        merge mx my = M.union my mx
+instance (Ord k, Mergeable a) => Mergeable (Map k a) where
+        merge mx my = M.unionWith merge my mx
 
 -- instance Mergeable String where
 --         merge _ b = b