@@ -1,3 +1,4 @@
1{-# LANGUAGE GeneralizedNewtypeDeriving #-}
2{-# LANGUAGE GeneralizedNewtypeDeriving #-}
2{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE TemplateHaskell #-}
4{-# LANGUAGE TemplateHaskell #-}
@@ -48,14 +49,14 @@ instance (Ord k) => Ixed (MonoidMap k v) where
48instance (Ord k) => At (MonoidMap k v) where
49instance (Ord k) => At (MonoidMap k v) where
49 at key = _MonoidMap . at key
50 at key = _MonoidMap . at key
52+#if MIN_VERSION_base(4,11,0)
51instance (Ord k, S.Semigroup v) => S.Semigroup (MonoidMap k v) where
53instance (Ord k, S.Semigroup v) => S.Semigroup (MonoidMap k v) where
52− (MonoidMap a) <> (MonoidMap b) =
54+ (<>) = mmAppend
53− MonoidMap $ M.unionWith (S.<>) a b
55+#endif
55instance (Ord k, Monoid v) => Monoid (MonoidMap k v) where
57instance (Ord k, Monoid v) => Monoid (MonoidMap k v) where
56 mempty = MonoidMap M.empty
58 mempty = MonoidMap M.empty
57− mappend (MonoidMap a) (MonoidMap b) =
59+ mappend = mmAppend
58− MonoidMap $ M.unionWith (<>) a b
60instance (ToJSON k, ToJSON v) => ToJSON (MonoidMap k v) where
61instance (ToJSON k, ToJSON v) => ToJSON (MonoidMap k v) where
61 toJSON (MonoidMap m) = toJSON $ L.map toObj $ M.toList m
62 toJSON (MonoidMap m) = toJSON $ L.map toObj $ M.toList m
@@ -75,6 +76,14 @@ instance (Ord k, FromJSON k, FromJSON v) => FromJSON (MonoidMap k v) where
75 val <- obj .: "value"
76 val <- obj .: "value"
76 return (key, val)
77 return (key, val)
79+#if MIN_VERSION_base(4,11,0)
80+mmAppend :: (Ord k, S.Semigroup v) => MonoidMap k v -> MonoidMap k v -> MonoidMap k v
81+mmAppend (MonoidMap a) (MonoidMap b) = MonoidMap $ M.unionWith (S.<>) a b
83+mmAppend :: (Ord k, Monoid v) => MonoidMap k v -> MonoidMap k v -> MonoidMap k v
84+mmAppend (MonoidMap a) (MonoidMap b) = MonoidMap $ M.unionWith (<>) a b
78-- | Convenient for 'vZoom' as first artument. Will prevent generation
87-- | Convenient for 'vZoom' as first artument. Will prevent generation
79-- of map with 'mempty' values
88-- of map with 'mempty' values
80mmSingleton :: (Eq v, Monoid v, Ord k) => k -> v -> MonoidMap k v
89mmSingleton :: (Eq v, Monoid v, Ord k) => k -> v -> MonoidMap k v