@@ -111,7 +111,7 @@ import qualified Data.Vector as V
111import Database.PostgreSQL.Simple.Internal
111import Database.PostgreSQL.Simple.Internal
112import Database.PostgreSQL.Simple.Compat
112import Database.PostgreSQL.Simple.Compat
113import Database.PostgreSQL.Simple.Ok
113import Database.PostgreSQL.Simple.Ok
114−import Database.PostgreSQL.Simple.Types (Binary(..), Null(..))
114+import Database.PostgreSQL.Simple.Types
115import Database.PostgreSQL.Simple.TypeInfo as TI
115import Database.PostgreSQL.Simple.TypeInfo as TI
116import qualified Database.PostgreSQL.Simple.TypeInfo.Static as TI
116import qualified Database.PostgreSQL.Simple.TypeInfo.Static as TI
117import Database.PostgreSQL.Simple.TypeInfo.Macro as TI
117import Database.PostgreSQL.Simple.TypeInfo.Macro as TI
@@ -414,7 +414,7 @@ instance (FromField a, FromField b) => FromField (Either a b) where
414 <|> (Left <$> fromField f dat)
414 <|> (Left <$> fromField f dat)
416-- | any postgresql array whose elements are compatible with type @a@
416-- | any postgresql array whose elements are compatible with type @a@
417−instance (FromField a, Typeable a) => FromField (Vector a) where
417+instance (FromField a, Typeable a) => FromField (PGArray a) where
418 fromField f mdat = do
418 fromField f mdat = do
419 info <- typeInfo f
419 info <- typeInfo f
420 case info of
420 case info of
@@ -424,7 +424,7 @@ instance (FromField a, Typeable a) => FromField (Vector a) where
424 Just dat -> do
424 Just dat -> do
425 case parseOnly (fromArray info f) dat of
425 case parseOnly (fromArray info f) dat of
426 Left err -> returnError ConversionFailed f err
426 Left err -> returnError ConversionFailed f err
427− Right conv -> V.fromList <$> conv
427+ Right conv -> PGArray <$> conv
428 _ -> returnError Incompatible f ""
428 _ -> returnError Incompatible f ""
430fromArray :: (FromField a)
430fromArray :: (FromField a)
@@ -437,6 +437,9 @@ fromArray typeInfo f = sequence . (parseIt <$>) <$> array delim
437 where f' | Arrays.Array _ <- item = f
437 where f' | Arrays.Array _ <- item = f
438 | otherwise = fElem
438 | otherwise = fElem
440+instance (FromField a, Typeable a) => FromField (Vector a) where
441+ fromField f v = V.fromList . fromPGArray <$> fromField f v
441instance FromField UUID where
444instance FromField UUID where
442 fromField f mbs =
445 fromField f mbs =