@@ -122,6 +122,8 @@ import qualified Data.ByteString.Lazy as LB
122122import qualified Data.Text as ST
123123import qualified Data.Text.Encoding as ST
124124import qualified Data.Text.Lazy as LT
125+import Data.UUID (UUID)
126+import qualified Data.UUID as UUID
125127
126128-- | Exception thrown if conversion from a SQL value to a Haskell
127129-- value fails.
@@ -444,6 +446,18 @@ fromArray typeInfo f = sequence . (parseIt <$>) <$> array delim
444446 where f' | Arrays.Array _ <- item = f
445447 | otherwise = fElem
446448
449+-- | uuid
450+instance FromField UUID where
451+ fromField f mbs =
452+ if typeOid f /= $(inlineTypoid TI.uuid)
453+ then returnError Incompatible f ""
454+ else case mbs of
455+ Nothing -> returnError UnexpectedNull f ""
456+ Just bs ->
457+ case UUID.fromASCIIBytes bs of
458+ Nothing -> returnError ConversionFailed f "Invalid UUID"
459+ Just uuid -> pure uuid
460+
447461-- | json
448462instance FromField JSON.Value where
449463 fromField f mbs =