@@ -54,6 +54,8 @@ import qualified Data.ByteString.Char8 as B
5454import Data.Int (Int16, Int32, Int64)
5555import Data.List (foldl')
5656import Data.Ratio (Ratio)
57+import Data.Sequence (Seq)
58+import qualified Data.Sequence as S
5759import Data.Time ( UTCTime, ZonedTime, LocalTime, Day, TimeOfDay )
5860import Data.Typeable (Typeable, typeOf)
5961import Data.Word (Word64)
@@ -62,6 +64,7 @@ import Database.PostgreSQL.Simple.BuiltinTypes
6264import Database.PostgreSQL.Simple.Ok
6365import Database.PostgreSQL.Simple.Types (Binary(..), Null(..))
6466import Database.PostgreSQL.Simple.Time
67+import Database.PostgreSQL.Simple.Arrays
6568import qualified Database.PostgreSQL.LibPQ as PQ
6669import System.IO.Unsafe (unsafePerformIO)
6770import qualified Data.ByteString as SB
@@ -241,6 +244,15 @@ instance (FromField a, FromField b) => FromField (Either a b) where
241244 fromField f dat = (Right <$> fromField f dat)
242245 <|> (Left <$> fromField f dat)
243246
247+instance (FromField a, Typeable a) => FromField (Seq a) where
248+ fromField f dat = either (returnError ConversionFailed f)
249+ (S.fromList <$>)
250+ (parseOnly (fromArray ',' f) (maybe "" id dat))
251+
252+fromArray :: (FromField a) => Char -> Field -> Parser (Ok [a])
253+fromArray delim f = sequence . (fromField f . Just
254+ . fmt delim <$>) <$> array delim
255+
244256newtype Compat = Compat Word64
245257
246258mkCompats :: [BuiltinType] -> Compat