@@ -7,10 +7,14 @@
7{-# LANGUAGE ScopedTypeVariables #-}
7{-# LANGUAGE ScopedTypeVariables #-}
8{-# LANGUAGE TypeFamilies #-}
8{-# LANGUAGE TypeFamilies #-}
9{-# OPTIONS_GHC -fno-warn-orphans #-}
9{-# OPTIONS_GHC -fno-warn-orphans #-}
10−-- | 'Data.Map' with a better 'Monoid' instance
10+-- |
14+-- Instances and convenience functions for 'Data.Map.Monoidal'. We use
15+-- monoidal-containers to take advantage of its better monoid instance.
12−-- 'Data.Map' has @mappend = union@, which is left-biased. AppendMap has
16+-- 'Data.Map' has @mappend = union@, which is left-biased. 'MonoidalMap'
13−-- @mappend = unionWith mappend@ instead.
17+-- has @mappend = unionWith mappend@ instead.
14module Data.AppendMap
18module Data.AppendMap
15 ( module Data.AppendMap
19 ( module Data.AppendMap
16 , module Data.Map.Monoidal
20 , module Data.Map.Monoidal
@@ -30,12 +34,15 @@ import qualified Data.Witherable as W
30import Data.Map.Monoidal
34import Data.Map.Monoidal
32{-# DEPRECATED AppendMap "Use 'MonoidalMap' instead" #-}
36{-# DEPRECATED AppendMap "Use 'MonoidalMap' instead" #-}
37+-- | AppendMap is a synonym for 'Data.Map.Monoidal.MonoidalMap'
33type AppendMap = MonoidalMap
38type AppendMap = MonoidalMap
35{-# DEPRECATED _unAppendMap "Use 'getMonoidalMap' instead" #-}
40{-# DEPRECATED _unAppendMap "Use 'getMonoidalMap' instead" #-}
41+-- | A synonym for 'getMonoidalMap'
36_unAppendMap :: MonoidalMap k v -> Map k v
42_unAppendMap :: MonoidalMap k v -> Map k v
37_unAppendMap = getMonoidalMap
43_unAppendMap = getMonoidalMap
45+-- | Pattern synonym for 'MonoidalMap'
39pattern AppendMap :: Map k v -> MonoidalMap k v
46pattern AppendMap :: Map k v -> MonoidalMap k v
40pattern AppendMap m = MonoidalMap m
47pattern AppendMap m = MonoidalMap m
@@ -50,6 +57,7 @@ nonEmptyDelete k vs =
50 then Nothing
57 then Nothing
51 else Just deleted
58 else Just deleted
60+-- | Like 'mapMaybe' but indicates whether the resulting container is empty
53mapMaybeNoNull :: (a -> Maybe b)
61mapMaybeNoNull :: (a -> Maybe b)
54 -> MonoidalMap token a
62 -> MonoidalMap token a
55 -> Maybe (MonoidalMap token b)
63 -> Maybe (MonoidalMap token b)
@@ -60,9 +68,11 @@ mapMaybeNoNull f as =
60 else Just bs
68 else Just bs
62-- TODO: Move instances to `Reflex.Patch`
70-- TODO: Move instances to `Reflex.Patch`
71+-- | Displays a 'MonoidalMap' as a tree. See 'Data.Map.Lazy.showTree' for details.
63showTree :: forall k a. (Show k, Show a) => MonoidalMap k a -> String
72showTree :: forall k a. (Show k, Show a) => MonoidalMap k a -> String
64showTree = coerce (Map.showTree :: Map k a -> String)
73showTree = coerce (Map.showTree :: Map k a -> String)
75+-- | Displays a 'MonoidalMap' as a tree, using the supplied function to convert nodes to string.
66showTreeWith :: forall k a. (k -> a -> String) -> Bool -> Bool -> MonoidalMap k a -> String
76showTreeWith :: forall k a. (k -> a -> String) -> Bool -> Bool -> MonoidalMap k a -> String
67showTreeWith = coerce (Map.showTreeWith :: (k -> a -> String) -> Bool -> Bool -> Map k a -> String)
77showTreeWith = coerce (Map.showTreeWith :: (k -> a -> String) -> Bool -> Bool -> Map k a -> String)