@@ -12,7 +12,9 @@ import Data.Foldable (foldl')
12
12
import Data.Maybe (catMaybes )
13
13
import Data.Text.Lazy (Text ,toStrict )
14
14
import Data.Text.Lazy.Builder (toLazyText )
15
- import Data.HashMap.Strict (HashMap ,(!) ,delete ,keys ,fromList ,union ,intersection ,difference )
15
+ import Data.HashMap.Strict (HashMap ,(!) ,union ,intersection ,difference )
16
+ import qualified Data.HashMap.Strict as HM
17
+ import qualified Data.HashSet as HS
16
18
import Data.Aeson (Value (Object ))
17
19
import Data.Aeson.Text (encodeToTextBuilder )
18
20
import Data.Aeson.Encode.Pretty (encodePrettyToTextBuilder )
@@ -42,8 +44,10 @@ filterHandler
42
44
= return
43
45
. FilterRes
44
46
. Object
45
- . foldl' (flip delete) filterDict
46
- $ toStrict <$> filterKeys
47
+ . HM. filterWithKey (\ k _ -> k `HS.member` keySet)
48
+ $ filterDict
49
+ where
50
+ keySet = HS. fromList $ toStrict <$> filterKeys
47
51
48
52
filterHandler _
49
53
= throwError
@@ -58,13 +62,13 @@ jsonDiff (Object dictA) (Object dictB) = Just (Object diffA,Object diffB)
58
62
where
59
63
addedA = dictA `difference` dictB
60
64
addedB = dictB `difference` dictA
61
- alteredKeys = keys $ dictA `intersection` dictB
65
+ alteredKeys = HM. keys $ dictA `intersection` dictB
62
66
altered = catMaybes [withKey k $ jsonDiff (dictA ! k) (dictB ! k) | k <- alteredKeys]
63
67
where
64
68
withKey k (Just (x,y)) = Just ((k,x),(k,y))
65
69
withKey k Nothing = Nothing
66
- alteredA = fromList $ fst <$> altered
67
- alteredB = fromList $ snd <$> altered
70
+ alteredA = HM. fromList $ fst <$> altered
71
+ alteredB = HM. fromList $ snd <$> altered
68
72
diffA = addedA `union` alteredA
69
73
diffB = addedB `union` alteredB
70
74
0 commit comments