@@ -81,25 +81,18 @@ mmAppend (MonoidMap a) (MonoidMap b) = MonoidMap $ M.unionWith (<>) a b
8181-- | Convenient for 'vZoom' as first artument. Will prevent generation
8282-- of map with 'mempty' values
8383mmSingleton :: (Eq v, Monoid v, Ord k) => k -> v -> MonoidMap k v
84−mmSingleton k = memptyWrap mempty $ MonoidMap . M.singleton k
84+mmSingleton k v
85+ | v == mempty = mempty
86+ | otherwise = MonoidMap . M.singleton k $ v
8587
8688-- | Set given value to 'mempty'
8789setMempty :: (Monoid s) => ASetter' s a -> a -> s
8890setMempty setter a = set setter a mempty
8991
90−memptyWrap :: (Eq a, Monoid a) => b -> (a -> b) -> a -> b
91−memptyWrap b f a
92− | a == mempty = b
93− | otherwise = f a
94−
95−-- | If given container is not 'mempty', then use given function to
96−-- append all its elements and return 'Just' result
97−neConcat
98− :: (Foldable f, Eq (f a), Monoid a, Monoid (f a))
99− => (a -> a -> a)
100− -> f a
101− -> Maybe a
102−neConcat f = memptyWrap Nothing (Just . F.foldl' f mempty)
92+neConcat :: Foldable f => (a -> a -> a) -> f a -> Maybe a
93+neConcat f a
94+ | F.null a = Nothing
95+ | otherwise = Just $ F.foldl1 f a
10396
10497textErrors :: [Text] -> Maybe Text
10598textErrors = neConcat (\a b -> a <> ", " <> b)