@@ -201,6 +201,7 @@ module Squeal.PostgreSQL.Binary
201201
202202import BinaryParser
203203import ByteString.StrictBuilder
204+import Control.Arrow (left)
204205import Control.Monad
205206import Data.Aeson hiding (Null)
206207import Data.Int
@@ -216,10 +217,12 @@ import Generics.SOP.Record
216217import GHC.TypeLits
217218import Network.IP.Addr
218219
219−import qualified Data.ByteString.Lazy as Lazy
220−import qualified Data.ByteString as Strict hiding (pack, unpack)
221−import qualified Data.Text.Lazy as Lazy
222−import qualified Data.Text as Strict hiding (empty)
220+import qualified Data.ByteString.Lazy as Lazy (ByteString)
221+import qualified Data.ByteString.Lazy as Lazy.ByteString
222+import qualified Data.ByteString as Strict (ByteString)
223+import qualified Data.Text.Lazy as Lazy (Text)
224+import qualified Data.Text as Strict (Text)
225+import qualified Data.Text as Strict.Text
223226import qualified Data.Vector as Vector
224227import qualified GHC.Generics as GHC
225228import qualified PostgreSQL.Binary.Decoding as Decoding
@@ -262,7 +265,7 @@ instance ToParam Char ('PGchar 1) where toParam = K . Encoding.char_utf8
262265instance ToParam Strict.Text 'PGtext where toParam = K . Encoding.text_strict
263266instance ToParam Lazy.Text 'PGtext where toParam = K . Encoding.text_lazy
264267instance ToParam String 'PGtext where
265− toParam = K . Encoding.text_strict . Strict.pack
268+ toParam = K . Encoding.text_strict . Strict.Text.pack
266269instance ToParam Strict.ByteString 'PGbytea where
267270 toParam = K . Encoding.bytea_strict
268271instance ToParam Lazy.ByteString 'PGbytea where
@@ -278,7 +281,9 @@ instance ToParam UTCTime 'PGtimestamptz where
278281instance ToParam DiffTime 'PGinterval where toParam = K . Encoding.interval_int
279282instance ToParam Value 'PGjson where toParam = K . Encoding.json_ast
280283instance ToParam Value 'PGjsonb where toParam = K . Encoding.jsonb_ast
281−instance ToParam Jsonb 'PGjsonb where toParam = toParam . getJsonb
284+instance ToJSON x => ToParam (Jsonb x) 'PGjsonb where
285+ toParam = K . Encoding.jsonb_bytes
286+ . Lazy.ByteString.toStrict . encode . getJsonb
282287instance ToArray x ('NotNull ('PGvararray ty))
283288 => ToParam x ('PGvararray ty) where
284289 toParam
@@ -306,7 +311,7 @@ instance
306311 gshowConstructor constructors (SOP xs)
307312 in
308313 K . Encoding.text_strict
309− . Strict.pack
314+ . Strict.Text.pack
310315 . gshowConstructor (constructorInfo (datatypeInfo (Proxy @x)))
311316 . from
312317instance ToParam x pg => ToParam (Composite x) pg where
@@ -440,7 +445,7 @@ instance FromValue ('PGchar 1) Char where fromValue = Decoding.char
440445instance FromValue 'PGtext Strict.Text where fromValue = Decoding.text_strict
441446instance FromValue 'PGtext Lazy.Text where fromValue = Decoding.text_lazy
442447instance FromValue 'PGtext String where
443− fromValue = Strict.unpack <$> Decoding.text_strict
448+ fromValue = Strict.Text.unpack <$> Decoding.text_strict
444449instance FromValue 'PGbytea Strict.ByteString where
445450 fromValue = Decoding.bytea_strict
446451instance FromValue 'PGbytea Lazy.ByteString where
@@ -457,8 +462,12 @@ instance FromValue 'PGinterval DiffTime where
457462 fromValue = Decoding.interval_int
458463instance FromValue 'PGjson Value where fromValue = Decoding.json_ast
459464instance FromValue 'PGjsonb Value where fromValue = Decoding.jsonb_ast
460−instance FromValue 'PGjsonb Jsonb where
461− fromValue = Jsonb <$> fromValue @'PGjsonb
465+instance FromJSON x => FromValue 'PGjson (Json x) where
466+ fromValue = Json <$>
467+ Decoding.json_bytes (left Strict.Text.pack . eitherDecodeStrict)
468+instance FromJSON x => FromValue 'PGjsonb (Jsonb x) where
469+ fromValue = Jsonb <$>
470+ Decoding.jsonb_bytes (left Strict.Text.pack . eitherDecodeStrict)
462471instance FromArray ('NotNull ('PGvararray ty)) y
463472 => FromValue ('PGvararray ty) y where
464473 fromValue = Decoding.array (fromArray @('NotNull ('PGvararray ty)) @y)
@@ -488,7 +497,7 @@ instance
488497 Decoding.enum
489498 $ fmap to
490499 . greadConstructor (constructorInfo (datatypeInfo (Proxy @y)))
491− . Strict.unpack
500+ . Strict.Text.unpack
492501instance FromValue pg y => FromValue pg (Composite y) where
493502 fromValue = Composite <$> fromValue @pg
494503instance