@@ -634,9 +634,50 @@ instance
634 = fmap fromRecord
634 = fmap fromRecord
635 . hsequence'
635 . hsequence'
636 . htrans (Proxy @FromField) fromField
636 . htrans (Proxy @FromField) fromField
637−instance (FromField (col ::: pgkey) (col ::: key), FromRow pgval val)
637+instance (FromField (col ::: pg) (col ::: hask))
638− => FromRow (col ::: pgkey ': pgval) (P (col ::: key), val) where
638+ => FromRow '[col ::: pg] (P (col ::: hask)) where
639− fromRow (key :* val) = (,) <$> (unComp . fromField) key <*> fromRow val
639+ fromRow (pg :* Nil) = (unComp . fromField) pg
641+ ( row ~ Join row1 row2
642+ , FromRow row1 hask1
643+ , FromRow row2 hask2
645+ ) => FromRow row (hask1, hask2) where
646+ fromRow row = case disjoin @row1 @row2 row of
647+ (row1, row2) -> (,) <$> fromRow row1 <*> fromRow row2
649+ ( row ~ Join row1 row23
650+ , FromRow row1 hask1
651+ , FromRow row23 (hask2, hask3)
653+ ) => FromRow row (hask1, hask2, hask3) where
654+ fromRow row = case disjoin @row1 @row23 row of
656+ hask1 <- fromRow row1
657+ (hask2, hask3) <- fromRow row23
658+ return (hask1, hask2, hask3)
660+ ( row ~ Join row1 row234
661+ , FromRow row1 hask1
662+ , FromRow row234 (hask2, hask3, hask4)
664+ ) => FromRow row (hask1, hask2, hask3, hask4) where
665+ fromRow row = case disjoin @row1 @row234 row of
666+ (row1, row234) -> do
667+ hask1 <- fromRow row1
668+ (hask2, hask3, hask4) <- fromRow row234
669+ return (hask1, hask2, hask3, hask4)
671+ ( row ~ Join row1 row2345
672+ , FromRow row1 hask1
673+ , FromRow row2345 (hask2, hask3, hask4, hask5)
675+ ) => FromRow row (hask1, hask2, hask3, hask4, hask5) where
676+ fromRow row = case disjoin @row1 @row2345 row of
677+ (row1, row2345) -> do
678+ hask1 <- fromRow row1
679+ (hask2, hask3, hask4, hask5) <- fromRow row2345
680+ return (hask1, hask2, hask3, hask4, hask5)
641-- | `Only` is a 1-tuple type, useful for encoding a single parameter with
682-- | `Only` is a 1-tuple type, useful for encoding a single parameter with
642-- `toParams` or decoding a single value with `fromRow`.
683-- `toParams` or decoding a single value with `fromRow`.