@@ -2,6 +2,7 @@
2{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
2{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
3{-# LANGUAGE PatternGuards, ScopedTypeVariables #-}
3{-# LANGUAGE PatternGuards, ScopedTypeVariables #-}
4{-# LANGUAGE RecordWildCards #-}
4{-# LANGUAGE RecordWildCards #-}
5+{-# LANGUAGE PolyKinds #-}
7Module: Database.PostgreSQL.Simple.FromField
8Module: Database.PostgreSQL.Simple.FromField
@@ -115,7 +116,7 @@ module Database.PostgreSQL.Simple.FromField
116#include "MachDeps.h"
117#include "MachDeps.h"
118−import Control.Applicative ( (<|>), (<$>), pure, (*>), (<*) )
119+import Control.Applicative ( Const(Const), (<|>), (<$>), pure, (*>), (<*) )
119import Control.Concurrent.MVar (MVar, newMVar)
120import Control.Concurrent.MVar (MVar, newMVar)
120import Control.Exception (Exception)
121import Control.Exception (Exception)
121import qualified Data.Aeson as JSON
122import qualified Data.Aeson as JSON
@@ -124,6 +125,7 @@ import qualified Data.Aeson.Parser as JSON (value')
124import Data.Attoparsec.ByteString.Char8 hiding (Result)
125import Data.Attoparsec.ByteString.Char8 hiding (Result)
125import Data.ByteString (ByteString)
126import Data.ByteString (ByteString)
126import qualified Data.ByteString.Char8 as B
127import qualified Data.ByteString.Char8 as B
128+import Data.Functor.Identity (Identity(Identity))
127import Data.Int (Int16, Int32, Int64)
129import Data.Int (Int16, Int32, Int64)
128import Data.IORef (IORef, newIORef)
130import Data.IORef (IORef, newIORef)
129import Data.Ratio (Ratio)
131import Data.Ratio (Ratio)
@@ -269,6 +271,12 @@ instance FromField () where
269 | typeOid f /= TI.voidOid = returnError Incompatible f ""
271 | typeOid f /= TI.voidOid = returnError Incompatible f ""
270 | otherwise = pure ()
272 | otherwise = pure ()
274+instance (FromField a) => FromField (Const a b) where
275+ fromField f bs = Const <$> fromField f bs
277+instance (FromField a) => FromField (Identity a) where
278+ fromField f bs = Identity <$> fromField f bs
272-- | For dealing with null values. Compatible with any postgresql type
280-- | For dealing with null values. Compatible with any postgresql type
273-- compatible with type @a@. Note that the type is not checked if
281-- compatible with type @a@. Note that the type is not checked if
274-- the value is null, although it is inadvisable to rely on this
282-- the value is null, although it is inadvisable to rely on this