@@ -873,29 +873,14 @@ instance (FromJSONKey k, Ord k) => FromJSON1 (M.Map k) where
873873 {-# INLINE liftParseJSON #-}
874874
875875instance (ToJSON v, ToJSONKey k) => ToJSON (M.Map k v) where
876− toJSON = case toJSONKey of
877− ToJSONKeyText (f,_) -> Object . mapHashKeyVal f toJSON
878− ToJSONKeyValue (f,_) -> Array . V.fromList . map (toJSONPair f) . M.toList
876+ toJSON = toJSON1
879877 {-# INLINE toJSON #-}
880878
881− toEncoding = case toJSONKey of
882− ToJSONKeyText (_,f) -> encodeMap f M.minViewWithKey M.foldrWithKey
883− ToJSONKeyValue (_,f) -> list (pairEncoding f) . M.toList
884− where pairEncoding :: (k -> Encoding) -> (k, v) -> Encoding
885− pairEncoding f (a, b) = tuple $ fromEncoding (f a) >*< builder b
879+ toEncoding = toEncoding1
886880 {-# INLINE toEncoding #-}
887881
888882instance (FromJSON v, FromJSONKey k, Ord k) => FromJSON (M.Map k v) where
889− parseJSON = case fromJSONKey of
890− FromJSONKeyCoerce _-> withObject "Map k v" $
891− fmap (H.foldrWithKey (M.insert . unsafeCoerce) M.empty) . H.traverseWithKey (\k v -> parseJSON v <?> Key k)
892− FromJSONKeyText f -> withObject "Map k v" $
893− fmap (H.foldrWithKey (M.insert . f) M.empty) . H.traverseWithKey (\k v -> parseJSON v <?> Key k)
894− FromJSONKeyTextParser f -> withObject "Map k v" $
895− H.foldrWithKey (\k v m -> M.insert <$> f k <*> (parseJSON v <?> Key k) <*> m) (pure M.empty)
896− FromJSONKeyValue f -> withArray "Map k v" $ \arr ->
897− M.fromList <$> (Tr.sequence .
898− zipWith (parseIndexedJSONPair f) [0..] . V.toList $ arr)
883+ parseJSON = parseJSON1
899884 {-# INLINE parseJSON #-}
900885
901886instance ToJSONKey k => ToJSON1 (H.HashMap k) where
@@ -913,32 +898,29 @@ instance ToJSONKey k => ToJSON1 (H.HashMap k) where
913898 {-# INLINE liftToEncoding #-}
914899
915900instance (ToJSON v, ToJSONKey k) => ToJSON (H.HashMap k v) where
916− toJSON = case toJSONKey of
917− ToJSONKeyText (f,_) -> Object . mapKeyVal f toJSON
918− ToJSONKeyValue (f,_) -> Array . V.fromList . map (toJSONPair f) . H.toList
901+ toJSON = toJSON1
919902 {-# INLINE toJSON #-}
920903
921− toEncoding = case toJSONKey of
922− ToJSONKeyText (_,f) -> encodeWithKey f H.foldrWithKey
923− ToJSONKeyValue (_,f) -> list (pairEncoding f) . H.toList
924− where pairEncoding :: (k -> Encoding) -> (k, v) -> Encoding
925− pairEncoding f (a, b) = tuple $ fromEncoding (f a) >*< builder b
904+ toEncoding = toEncoding1
926905 {-# INLINE toEncoding #-}
927906
928−instance (FromJSON v, FromJSONKey k, Eq k, Hashable k) => FromJSON (H.HashMap k v) where
929− parseJSON = case fromJSONKey of
907+instance (FromJSONKey k, Eq k, Hashable k) => FromJSON1 (H.HashMap k) where
908+ liftParseJSON p _ = case fromJSONKey of
930909 FromJSONKeyCoerce _ -> withObject "HashMap ~Text v" $
931− uc . H.traverseWithKey (\k v -> parseJSON v <?> Key k)
910+ uc . H.traverseWithKey (\k v -> p v <?> Key k)
932911 FromJSONKeyText f -> withObject "HashMap k v" $
933− fmap (mapKey f) . H.traverseWithKey (\k v -> parseJSON v <?> Key k)
912+ fmap (mapKey f) . H.traverseWithKey (\k v -> p v <?> Key k)
934913 FromJSONKeyTextParser f -> withObject "HashMap k v" $
935− H.foldrWithKey (\k v m -> H.insert <$> f k <*> (parseJSON v <?> Key k) <*> m) (pure H.empty)
914+ H.foldrWithKey (\k v m -> H.insert <$> f k <*> (p v <?> Key k) <*> m) (pure H.empty)
936915 FromJSONKeyValue f -> withArray "Map k v" $ \arr ->
937916 H.fromList <$> (Tr.sequence .
938− zipWith (parseIndexedJSONPair f) [0..] . V.toList $ arr)
917+ zipWith (parseIndexedJSONPair' f p) [0..] . V.toList $ arr)
939918 where
940919 uc :: Parser (H.HashMap Text v) -> Parser (H.HashMap k v)
941920 uc = unsafeCoerce
921+
922+instance (FromJSON v, FromJSONKey k, Eq k, Hashable k) => FromJSON (H.HashMap k v) where
923+ parseJSON = parseJSON1
942924 {-# INLINE parseJSON #-}
943925
944926instance (ToJSON v) => ToJSON (Tree.Tree v) where