@@ -656,6 +656,19 @@ instance (FromJSON a) => FromJSON (Seq.Seq a) where
656656 parseJSON = parseJSON1
657657 {-# INLINE parseJSON #-}
658658
659+instance ToJSON1 Vector where
660+ liftToJSON to = Array . V.map to
661+ {-# INLINE liftToJSON #-}
662+
663+ liftToEncoding to xs
664+ | V.null xs = E.emptyArray_
665+ | otherwise = Encoding $
666+ B.char7 '[' <> fromEncoding (to (V.unsafeHead xs)) <>
667+ V.foldr go (B.char7 ']') (V.unsafeTail xs)
668+ where
669+ go v b = B.char7 ',' <> fromEncoding (to v) <> b
670+ {-# INLINE liftToEncoding #-}
671+
659672instance (ToJSON a) => ToJSON (Vector a) where
660673 toJSON = Array . V.map toJSON
661674 {-# INLINE toJSON #-}
@@ -672,9 +685,13 @@ encodeVector xs
672685 where go v b = B.char7 ',' <> builder v <> b
673686{-# INLINE encodeVector #-}
674687
688+instance FromJSON1 Vector where
689+ liftParseJSON p = withArray "Vector a" $
690+ V.mapM (uncurry $ parseIndexedJSON' p) . V.indexed
691+ {-# INLINE liftParseJSON #-}
692+
675693instance (FromJSON a) => FromJSON (Vector a) where
676− parseJSON = withArray "Vector a" $ V.mapM (uncurry parseIndexedJSON) .
677− V.indexed
694+ parseJSON = parseJSON1
678695 {-# INLINE parseJSON #-}
679696
680697vectorToJSON :: (VG.Vector v a, ToJSON a) => v a -> Value