@@ -46,6 +46,7 @@ module Squeal.PostgreSQL.Binary
47import BinaryParser
47import BinaryParser
48import Data.Aeson hiding (Null)
48import Data.Aeson hiding (Null)
49+import Data.Char (toUpper)
49import Data.Int
50import Data.Int
50import Data.Kind
51import Data.Kind
51import Data.Scientific
52import Data.Scientific
@@ -56,6 +57,7 @@ import Data.Word
56import Generics.SOP
57import Generics.SOP
57import GHC.TypeLits
58import GHC.TypeLits
58import Network.IP.Addr
59import Network.IP.Addr
60+import Text.Read (readMaybe)
60import qualified Data.ByteString.Lazy as Lazy
62import qualified Data.ByteString.Lazy as Lazy
61import qualified Data.ByteString as Strict hiding (unpack)
63import qualified Data.ByteString as Strict hiding (unpack)
@@ -203,6 +205,21 @@ instance FromValue pg y => FromValue ('PGfixarray n pg) (Vector (Maybe y)) where
203 fromValue _ = Decoding.array
205 fromValue _ = Decoding.array
204 (Decoding.dimensionArray Vector.replicateM
206 (Decoding.dimensionArray Vector.replicateM
205 (Decoding.nullableValueArray (fromValue (Proxy @pg))))
207 (Decoding.nullableValueArray (fromValue (Proxy @pg))))
211+ -- , SameLabels (DatatypeInfoOf y) labels
213+ -- uncomment above constraint when GHC issue #11671 is fixed
214+ -- Allow labels starting with uppercase with OverloadedLabels
215+ -- https://ghc.haskell.org/trac/ghc/ticket/11671?cversion=0&cnum_hist=8
216+ ) => FromValue ('PGenum labels) y where
220+ upper (ch:chs) = toUpper ch : chs
222+ Decoding.enum (readMaybe . upper . Strict.unpack)
207 ( SListI fields
224 ( SListI fields
208 , IsMaybes ys
225 , IsMaybes ys