module Hasql.Decoders.All where
import Data.Aeson qualified as Aeson
import Data.IP qualified as Iproute
import Data.Vector.Generic qualified as GenericVector
import Hasql.Decoders.Array qualified as Array
import Hasql.Decoders.Composite qualified as Composite
import Hasql.Decoders.Result qualified as Result
import Hasql.Decoders.Results qualified as Results
import Hasql.Decoders.Row qualified as Row
import Hasql.Decoders.Value qualified as Value
import Hasql.PostgresTypeInfo qualified as PTI
import Hasql.Prelude hiding (bool, maybe)
import PostgreSQL.Binary.Decoding qualified as A
import PostgreSQL.Binary.Range qualified as R
newtype Result a = Result (Results.Results a) deriving ((forall a b. (a -> b) -> Result a -> Result b)
-> (forall a b. a -> Result b -> Result a) -> Functor Result
forall a b. a -> Result b -> Result a
forall a b. (a -> b) -> Result a -> Result b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Result a -> Result b
fmap :: forall a b. (a -> b) -> Result a -> Result b
$c<$ :: forall a b. a -> Result b -> Result a
<$ :: forall a b. a -> Result b -> Result a
Functor, Functor Result
Functor Result =>
(forall a b. (a -> Maybe b) -> Result a -> Result b)
-> (forall a. Result (Maybe a) -> Result a)
-> (forall a. (a -> Bool) -> Result a -> Result a)
-> (forall a b. Result a -> Result b)
-> Filterable Result
forall a. Result (Maybe a) -> Result a
forall a. (a -> Bool) -> Result a -> Result a
forall a b. Result a -> Result b
forall a b. (a -> Maybe b) -> Result a -> Result b
forall (f :: * -> *).
Functor f =>
(forall a b. (a -> Maybe b) -> f a -> f b)
-> (forall a. f (Maybe a) -> f a)
-> (forall a. (a -> Bool) -> f a -> f a)
-> (forall a b. f a -> f b)
-> Filterable f
$cmapMaybe :: forall a b. (a -> Maybe b) -> Result a -> Result b
mapMaybe :: forall a b. (a -> Maybe b) -> Result a -> Result b
$ccatMaybes :: forall a. Result (Maybe a) -> Result a
catMaybes :: forall a. Result (Maybe a) -> Result a
$cfilter :: forall a. (a -> Bool) -> Result a -> Result a
filter :: forall a. (a -> Bool) -> Result a -> Result a
$cdrain :: forall a b. Result a -> Result b
drain :: forall a b. Result a -> Result b
Filterable)
{-# INLINEABLE noResult #-}
noResult :: Result ()
noResult :: Result ()
noResult = Results () -> Result ()
forall a. Results a -> Result a
Result (Result () -> Results ()
forall a. Result a -> Results a
Results.single Result ()
Result.noResult)
{-# INLINEABLE rowsAffected #-}
rowsAffected :: Result Int64
rowsAffected :: Result Int64
rowsAffected = Results Int64 -> Result Int64
forall a. Results a -> Result a
Result (Result Int64 -> Results Int64
forall a. Result a -> Results a
Results.single Result Int64
Result.rowsAffected)
{-# INLINEABLE singleRow #-}
singleRow :: Row a -> Result a
singleRow :: forall a. Row a -> Result a
singleRow (Row Row a
row) = Results a -> Result a
forall a. Results a -> Result a
Result (Result a -> Results a
forall a. Result a -> Results a
Results.single (Row a -> Result a
forall a. Row a -> Result a
Result.single Row a
row))
refineResult :: (a -> Either Text b) -> Result a -> Result b
refineResult :: forall a b. (a -> Either Text b) -> Result a -> Result b
refineResult a -> Either Text b
refiner (Result Results a
results) = Results b -> Result b
forall a. Results a -> Result a
Result ((a -> Either Text b) -> Results a -> Results b
forall a b. (a -> Either Text b) -> Results a -> Results b
Results.refine a -> Either Text b
refiner Results a
results)
{-# INLINEABLE foldlRows #-}
foldlRows :: (a -> b -> a) -> a -> Row b -> Result a
foldlRows :: forall a b. (a -> b -> a) -> a -> Row b -> Result a
foldlRows a -> b -> a
step a
init (Row Row b
row) = Results a -> Result a
forall a. Results a -> Result a
Result (Result a -> Results a
forall a. Result a -> Results a
Results.single ((a -> b -> a) -> a -> Row b -> Result a
forall a b. (a -> b -> a) -> a -> Row b -> Result a
Result.foldl a -> b -> a
step a
init Row b
row))
{-# INLINEABLE foldrRows #-}
foldrRows :: (b -> a -> a) -> a -> Row b -> Result a
foldrRows :: forall b a. (b -> a -> a) -> a -> Row b -> Result a
foldrRows b -> a -> a
step a
init (Row Row b
row) = Results a -> Result a
forall a. Results a -> Result a
Result (Result a -> Results a
forall a. Result a -> Results a
Results.single ((b -> a -> a) -> a -> Row b -> Result a
forall b a. (b -> a -> a) -> a -> Row b -> Result a
Result.foldr b -> a -> a
step a
init Row b
row))
{-# INLINEABLE rowMaybe #-}
rowMaybe :: Row a -> Result (Maybe a)
rowMaybe :: forall a. Row a -> Result (Maybe a)
rowMaybe (Row Row a
row) = Results (Maybe a) -> Result (Maybe a)
forall a. Results a -> Result a
Result (Result (Maybe a) -> Results (Maybe a)
forall a. Result a -> Results a
Results.single (Row a -> Result (Maybe a)
forall a. Row a -> Result (Maybe a)
Result.maybe Row a
row))
{-# INLINEABLE rowVector #-}
rowVector :: Row a -> Result (Vector a)
rowVector :: forall a. Row a -> Result (Vector a)
rowVector (Row Row a
row) = Results (Vector a) -> Result (Vector a)
forall a. Results a -> Result a
Result (Result (Vector a) -> Results (Vector a)
forall a. Result a -> Results a
Results.single (Row a -> Result (Vector a)
forall a. Row a -> Result (Vector a)
Result.vector Row a
row))
{-# INLINEABLE rowList #-}
rowList :: Row a -> Result [a]
rowList :: forall a. Row a -> Result [a]
rowList = (a -> [a] -> [a]) -> [a] -> Row a -> Result [a]
forall b a. (b -> a -> a) -> a -> Row b -> Result a
foldrRows a -> [a] -> [a]
forall a. a -> [a] -> [a]
strictCons []
newtype Row a = Row (Row.Row a)
deriving ((forall a b. (a -> b) -> Row a -> Row b)
-> (forall a b. a -> Row b -> Row a) -> Functor Row
forall a b. a -> Row b -> Row a
forall a b. (a -> b) -> Row a -> Row b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Row a -> Row b
fmap :: forall a b. (a -> b) -> Row a -> Row b
$c<$ :: forall a b. a -> Row b -> Row a
<$ :: forall a b. a -> Row b -> Row a
Functor, Functor Row
Functor Row =>
(forall a. a -> Row a)
-> (forall a b. Row (a -> b) -> Row a -> Row b)
-> (forall a b c. (a -> b -> c) -> Row a -> Row b -> Row c)
-> (forall a b. Row a -> Row b -> Row b)
-> (forall a b. Row a -> Row b -> Row a)
-> Applicative Row
forall a. a -> Row a
forall a b. Row a -> Row b -> Row a
forall a b. Row a -> Row b -> Row b
forall a b. Row (a -> b) -> Row a -> Row b
forall a b c. (a -> b -> c) -> Row a -> Row b -> Row c
forall (f :: * -> *).
Functor f =>
(forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
$cpure :: forall a. a -> Row a
pure :: forall a. a -> Row a
$c<*> :: forall a b. Row (a -> b) -> Row a -> Row b
<*> :: forall a b. Row (a -> b) -> Row a -> Row b
$cliftA2 :: forall a b c. (a -> b -> c) -> Row a -> Row b -> Row c
liftA2 :: forall a b c. (a -> b -> c) -> Row a -> Row b -> Row c
$c*> :: forall a b. Row a -> Row b -> Row b
*> :: forall a b. Row a -> Row b -> Row b
$c<* :: forall a b. Row a -> Row b -> Row a
<* :: forall a b. Row a -> Row b -> Row a
Applicative, Applicative Row
Applicative Row =>
(forall a b. Row a -> (a -> Row b) -> Row b)
-> (forall a b. Row a -> Row b -> Row b)
-> (forall a. a -> Row a)
-> Monad Row
forall a. a -> Row a
forall a b. Row a -> Row b -> Row b
forall a b. Row a -> (a -> Row b) -> Row b
forall (m :: * -> *).
Applicative m =>
(forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
$c>>= :: forall a b. Row a -> (a -> Row b) -> Row b
>>= :: forall a b. Row a -> (a -> Row b) -> Row b
$c>> :: forall a b. Row a -> Row b -> Row b
>> :: forall a b. Row a -> Row b -> Row b
$creturn :: forall a. a -> Row a
return :: forall a. a -> Row a
Monad, Monad Row
Monad Row => (forall a. String -> Row a) -> MonadFail Row
forall a. String -> Row a
forall (m :: * -> *).
Monad m =>
(forall a. String -> m a) -> MonadFail m
$cfail :: forall a. String -> Row a
fail :: forall a. String -> Row a
MonadFail)
{-# INLINEABLE column #-}
column :: NullableOrNot Value a -> Row a
column :: forall a. NullableOrNot Value a -> Row a
column = \case
NonNullable (Value Value a
imp) -> Row a -> Row a
forall a. Row a -> Row a
Row (Value a -> Row a
forall a. Value a -> Row a
Row.nonNullValue Value a
imp)
Nullable (Value Value a
imp) -> Row a -> Row a
forall a. Row a -> Row a
Row (Value a -> Row (Maybe a)
forall a. Value a -> Row (Maybe a)
Row.value Value a
imp)
data NullableOrNot decoder a where
NonNullable :: decoder a -> NullableOrNot decoder a
Nullable :: decoder a -> NullableOrNot decoder (Maybe a)
nonNullable :: decoder a -> NullableOrNot decoder a
nonNullable :: forall (decoder :: * -> *) a. decoder a -> NullableOrNot decoder a
nonNullable = decoder a -> NullableOrNot decoder a
forall (decoder :: * -> *) a. decoder a -> NullableOrNot decoder a
NonNullable
nullable :: decoder a -> NullableOrNot decoder (Maybe a)
nullable :: forall (decoder :: * -> *) a.
decoder a -> NullableOrNot decoder (Maybe a)
nullable = decoder a -> NullableOrNot decoder (Maybe a)
forall (decoder :: * -> *) a.
decoder a -> NullableOrNot decoder (Maybe a)
Nullable
newtype Value a = Value (Value.Value a)
deriving ((forall a b. (a -> b) -> Value a -> Value b)
-> (forall a b. a -> Value b -> Value a) -> Functor Value
forall a b. a -> Value b -> Value a
forall a b. (a -> b) -> Value a -> Value b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Value a -> Value b
fmap :: forall a b. (a -> b) -> Value a -> Value b
$c<$ :: forall a b. a -> Value b -> Value a
<$ :: forall a b. a -> Value b -> Value a
Functor, Functor Value
Functor Value =>
(forall a b. (a -> Maybe b) -> Value a -> Value b)
-> (forall a. Value (Maybe a) -> Value a)
-> (forall a. (a -> Bool) -> Value a -> Value a)
-> (forall a b. Value a -> Value b)
-> Filterable Value
forall a. Value (Maybe a) -> Value a
forall a. (a -> Bool) -> Value a -> Value a
forall a b. Value a -> Value b
forall a b. (a -> Maybe b) -> Value a -> Value b
forall (f :: * -> *).
Functor f =>
(forall a b. (a -> Maybe b) -> f a -> f b)
-> (forall a. f (Maybe a) -> f a)
-> (forall a. (a -> Bool) -> f a -> f a)
-> (forall a b. f a -> f b)
-> Filterable f
$cmapMaybe :: forall a b. (a -> Maybe b) -> Value a -> Value b
mapMaybe :: forall a b. (a -> Maybe b) -> Value a -> Value b
$ccatMaybes :: forall a. Value (Maybe a) -> Value a
catMaybes :: forall a. Value (Maybe a) -> Value a
$cfilter :: forall a. (a -> Bool) -> Value a -> Value a
filter :: forall a. (a -> Bool) -> Value a -> Value a
$cdrain :: forall a b. Value a -> Value b
drain :: forall a b. Value a -> Value b
Filterable)
type role Value representational
{-# INLINEABLE bool #-}
bool :: Value Bool
bool :: Value Bool
bool = Value Bool -> Value Bool
forall a. Value a -> Value a
Value (Text -> PTI -> Value Bool -> Value Bool -> Value Bool
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"bool" PTI
PTI.bool Value Bool
A.bool Value Bool
A.bool)
{-# INLINEABLE int2 #-}
int2 :: Value Int16
int2 :: Value Int16
int2 = Value Int16 -> Value Int16
forall a. Value a -> Value a
Value (Text -> PTI -> Value Int16 -> Value Int16 -> Value Int16
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"int2" PTI
PTI.int2 Value Int16
forall a. (Integral a, Bits a) => Value a
A.int Value Int16
forall a. (Integral a, Bits a) => Value a
A.int)
{-# INLINEABLE int4 #-}
int4 :: Value Int32
int4 :: Value Int32
int4 = Value Int32 -> Value Int32
forall a. Value a -> Value a
Value (Text -> PTI -> Value Int32 -> Value Int32 -> Value Int32
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"int4" PTI
PTI.int4 Value Int32
forall a. (Integral a, Bits a) => Value a
A.int Value Int32
forall a. (Integral a, Bits a) => Value a
A.int)
{-# INLINEABLE int8 #-}
int8 :: Value Int64
int8 :: Value Int64
int8 =
{-# SCC "int8" #-}
Value Int64 -> Value Int64
forall a. Value a -> Value a
Value (Text -> PTI -> Value Int64 -> Value Int64 -> Value Int64
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"int8" PTI
PTI.int8 ({-# SCC "int8.int" #-} Value Int64
forall a. (Integral a, Bits a) => Value a
A.int) ({-# SCC "int8.int" #-} Value Int64
forall a. (Integral a, Bits a) => Value a
A.int))
{-# INLINEABLE float4 #-}
float4 :: Value Float
float4 :: Value Float
float4 = Value Float -> Value Float
forall a. Value a -> Value a
Value (Text -> PTI -> Value Float -> Value Float -> Value Float
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"float4" PTI
PTI.float4 Value Float
A.float4 Value Float
A.float4)
{-# INLINEABLE float8 #-}
float8 :: Value Double
float8 :: Value Double
float8 = Value Double -> Value Double
forall a. Value a -> Value a
Value (Text -> PTI -> Value Double -> Value Double -> Value Double
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"float8" PTI
PTI.float8 Value Double
A.float8 Value Double
A.float8)
{-# INLINEABLE numeric #-}
numeric :: Value Scientific
numeric :: Value Scientific
numeric = Value Scientific -> Value Scientific
forall a. Value a -> Value a
Value (Text
-> PTI -> Value Scientific -> Value Scientific -> Value Scientific
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"numeric" PTI
PTI.numeric Value Scientific
A.numeric Value Scientific
A.numeric)
{-# INLINEABLE char #-}
char :: Value Char
char :: Value Char
char = Value Char -> Value Char
forall a. Value a -> Value a
Value (Text -> PTI -> Value Char -> Value Char -> Value Char
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"char" PTI
PTI.char Value Char
A.char Value Char
A.char)
{-# INLINEABLE text #-}
text :: Value Text
text :: Value Text
text = Value Text -> Value Text
forall a. Value a -> Value a
Value (Text -> PTI -> Value Text -> Value Text -> Value Text
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"text" PTI
PTI.text Value Text
A.text_strict Value Text
A.text_strict)
{-# INLINEABLE bytea #-}
bytea :: Value ByteString
bytea :: Value ByteString
bytea = Value ByteString -> Value ByteString
forall a. Value a -> Value a
Value (Text
-> PTI -> Value ByteString -> Value ByteString -> Value ByteString
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"bytea" PTI
PTI.bytea Value ByteString
A.bytea_strict Value ByteString
A.bytea_strict)
{-# INLINEABLE date #-}
date :: Value Day
date :: Value Day
date = Value Day -> Value Day
forall a. Value a -> Value a
Value (Text -> PTI -> Value Day -> Value Day -> Value Day
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"date" PTI
PTI.date Value Day
A.date Value Day
A.date)
{-# INLINEABLE timestamp #-}
timestamp :: Value LocalTime
timestamp :: Value LocalTime
timestamp = Value LocalTime -> Value LocalTime
forall a. Value a -> Value a
Value (Text
-> PTI -> Value LocalTime -> Value LocalTime -> Value LocalTime
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"timestamp" PTI
PTI.timestamp Value LocalTime
A.timestamp_float Value LocalTime
A.timestamp_int)
{-# INLINEABLE timestamptz #-}
timestamptz :: Value UTCTime
timestamptz :: Value UTCTime
timestamptz = Value UTCTime -> Value UTCTime
forall a. Value a -> Value a
Value (Text -> PTI -> Value UTCTime -> Value UTCTime -> Value UTCTime
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"timestamptz" PTI
PTI.timestamptz Value UTCTime
A.timestamptz_float Value UTCTime
A.timestamptz_int)
{-# INLINEABLE time #-}
time :: Value TimeOfDay
time :: Value TimeOfDay
time = Value TimeOfDay -> Value TimeOfDay
forall a. Value a -> Value a
Value (Text
-> PTI -> Value TimeOfDay -> Value TimeOfDay -> Value TimeOfDay
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"time" PTI
PTI.time Value TimeOfDay
A.time_float Value TimeOfDay
A.time_int)
{-# INLINEABLE timetz #-}
timetz :: Value (TimeOfDay, TimeZone)
timetz :: Value (TimeOfDay, TimeZone)
timetz = Value (TimeOfDay, TimeZone) -> Value (TimeOfDay, TimeZone)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (TimeOfDay, TimeZone)
-> Value (TimeOfDay, TimeZone)
-> Value (TimeOfDay, TimeZone)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"timetz" PTI
PTI.timetz Value (TimeOfDay, TimeZone)
A.timetz_float Value (TimeOfDay, TimeZone)
A.timetz_int)
{-# INLINEABLE interval #-}
interval :: Value DiffTime
interval :: Value DiffTime
interval = Value DiffTime -> Value DiffTime
forall a. Value a -> Value a
Value (Text -> PTI -> Value DiffTime -> Value DiffTime -> Value DiffTime
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"interval" PTI
PTI.interval Value DiffTime
A.interval_float Value DiffTime
A.interval_int)
{-# INLINEABLE uuid #-}
uuid :: Value UUID
uuid :: Value UUID
uuid = Value UUID -> Value UUID
forall a. Value a -> Value a
Value (Text -> PTI -> Value UUID -> Value UUID -> Value UUID
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"uuid" PTI
PTI.uuid Value UUID
A.uuid Value UUID
A.uuid)
{-# INLINEABLE inet #-}
inet :: Value Iproute.IPRange
inet :: Value IPRange
inet = Value IPRange -> Value IPRange
forall a. Value a -> Value a
Value (Text -> PTI -> Value IPRange -> Value IPRange -> Value IPRange
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"inet" PTI
PTI.inet Value IPRange
A.inet Value IPRange
A.inet)
{-# INLINEABLE macaddr #-}
macaddr :: Value (Word8, Word8, Word8, Word8, Word8, Word8)
macaddr :: Value (Word8, Word8, Word8, Word8, Word8, Word8)
macaddr = Value (Word8, Word8, Word8, Word8, Word8, Word8)
-> Value (Word8, Word8, Word8, Word8, Word8, Word8)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (Word8, Word8, Word8, Word8, Word8, Word8)
-> Value (Word8, Word8, Word8, Word8, Word8, Word8)
-> Value (Word8, Word8, Word8, Word8, Word8, Word8)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"macaddr" PTI
PTI.macaddr Value (Word8, Word8, Word8, Word8, Word8, Word8)
A.macaddr Value (Word8, Word8, Word8, Word8, Word8, Word8)
A.macaddr)
{-# INLINEABLE json #-}
json :: Value Aeson.Value
json :: Value Value
json = Value Value -> Value Value
forall a. Value a -> Value a
Value (Text -> PTI -> Value Value -> Value Value -> Value Value
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"json" PTI
PTI.json Value Value
A.json_ast Value Value
A.json_ast)
{-# INLINEABLE jsonBytes #-}
jsonBytes :: (ByteString -> Either Text a) -> Value a
jsonBytes :: forall a. (ByteString -> Either Text a) -> Value a
jsonBytes ByteString -> Either Text a
fn = Value a -> Value a
forall a. Value a -> Value a
Value (Value a -> Value a
forall a. Value a -> Value a
Value.decoder ((ByteString -> Either Text a) -> Value a
forall a. (ByteString -> Either Text a) -> Value a
A.json_bytes ByteString -> Either Text a
fn))
{-# INLINEABLE jsonb #-}
jsonb :: Value Aeson.Value
jsonb :: Value Value
jsonb = Value Value -> Value Value
forall a. Value a -> Value a
Value (Text -> PTI -> Value Value -> Value Value -> Value Value
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"jsonb" PTI
PTI.jsonb Value Value
A.jsonb_ast Value Value
A.jsonb_ast)
{-# INLINEABLE jsonbBytes #-}
jsonbBytes :: (ByteString -> Either Text a) -> Value a
jsonbBytes :: forall a. (ByteString -> Either Text a) -> Value a
jsonbBytes ByteString -> Either Text a
fn = Value a -> Value a
forall a. Value a -> Value a
Value (Value a -> Value a
forall a. Value a -> Value a
Value.decoder ((ByteString -> Either Text a) -> Value a
forall a. (ByteString -> Either Text a) -> Value a
A.jsonb_bytes ByteString -> Either Text a
fn))
{-# INLINEABLE int4range #-}
int4range :: Value (R.Range Int32)
int4range :: Value (Range Int32)
int4range = Value (Range Int32) -> Value (Range Int32)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (Range Int32)
-> Value (Range Int32)
-> Value (Range Int32)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"int4range" PTI
PTI.int4range Value (Range Int32)
A.int4range Value (Range Int32)
A.int4range)
{-# INLINEABLE int8range #-}
int8range :: Value (R.Range Int64)
int8range :: Value (Range Int64)
int8range = Value (Range Int64) -> Value (Range Int64)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (Range Int64)
-> Value (Range Int64)
-> Value (Range Int64)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"int8range" PTI
PTI.int8range Value (Range Int64)
A.int8range Value (Range Int64)
A.int8range)
{-# INLINEABLE numrange #-}
numrange :: Value (R.Range Scientific)
numrange :: Value (Range Scientific)
numrange = Value (Range Scientific) -> Value (Range Scientific)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (Range Scientific)
-> Value (Range Scientific)
-> Value (Range Scientific)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"numrange" PTI
PTI.numrange Value (Range Scientific)
A.numrange Value (Range Scientific)
A.numrange)
{-# INLINEABLE tsrange #-}
tsrange :: Value (R.Range LocalTime)
tsrange :: Value (Range LocalTime)
tsrange = Value (Range LocalTime) -> Value (Range LocalTime)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (Range LocalTime)
-> Value (Range LocalTime)
-> Value (Range LocalTime)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"tsrange" PTI
PTI.tsrange Value (Range LocalTime)
A.tsrange_float Value (Range LocalTime)
A.tsrange_int)
{-# INLINEABLE tstzrange #-}
tstzrange :: Value (R.Range UTCTime)
tstzrange :: Value (Range UTCTime)
tstzrange = Value (Range UTCTime) -> Value (Range UTCTime)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (Range UTCTime)
-> Value (Range UTCTime)
-> Value (Range UTCTime)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"tstzrange" PTI
PTI.tstzrange Value (Range UTCTime)
A.tstzrange_float Value (Range UTCTime)
A.tstzrange_int)
{-# INLINEABLE daterange #-}
daterange :: Value (R.Range Day)
daterange :: Value (Range Day)
daterange = Value (Range Day) -> Value (Range Day)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (Range Day)
-> Value (Range Day)
-> Value (Range Day)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"daterange" PTI
PTI.daterange Value (Range Day)
A.daterange Value (Range Day)
A.daterange)
{-# INLINEABLE int4multirange #-}
int4multirange :: Value (R.Multirange Int32)
int4multirange :: Value (Multirange Int32)
int4multirange = Value (Multirange Int32) -> Value (Multirange Int32)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (Multirange Int32)
-> Value (Multirange Int32)
-> Value (Multirange Int32)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"int4multirange" PTI
PTI.int4multirange Value (Multirange Int32)
A.int4multirange Value (Multirange Int32)
A.int4multirange)
{-# INLINEABLE int8multirange #-}
int8multirange :: Value (R.Multirange Int64)
int8multirange :: Value (Multirange Int64)
int8multirange = Value (Multirange Int64) -> Value (Multirange Int64)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (Multirange Int64)
-> Value (Multirange Int64)
-> Value (Multirange Int64)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"int8multirange" PTI
PTI.int8multirange Value (Multirange Int64)
A.int8multirange Value (Multirange Int64)
A.int8multirange)
{-# INLINEABLE nummultirange #-}
nummultirange :: Value (R.Multirange Scientific)
nummultirange :: Value (Multirange Scientific)
nummultirange = Value (Multirange Scientific) -> Value (Multirange Scientific)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (Multirange Scientific)
-> Value (Multirange Scientific)
-> Value (Multirange Scientific)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"nummultirange" PTI
PTI.nummultirange Value (Multirange Scientific)
A.nummultirange Value (Multirange Scientific)
A.nummultirange)
{-# INLINEABLE tsmultirange #-}
tsmultirange :: Value (R.Multirange LocalTime)
tsmultirange :: Value (Multirange LocalTime)
tsmultirange = Value (Multirange LocalTime) -> Value (Multirange LocalTime)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (Multirange LocalTime)
-> Value (Multirange LocalTime)
-> Value (Multirange LocalTime)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"tsmultirange" PTI
PTI.tsmultirange Value (Multirange LocalTime)
A.tsmultirange_float Value (Multirange LocalTime)
A.tsmultirange_int)
{-# INLINEABLE tstzmultirange #-}
tstzmultirange :: Value (R.Multirange UTCTime)
tstzmultirange :: Value (Multirange UTCTime)
tstzmultirange = Value (Multirange UTCTime) -> Value (Multirange UTCTime)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (Multirange UTCTime)
-> Value (Multirange UTCTime)
-> Value (Multirange UTCTime)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"tstzmultirange" PTI
PTI.tstzmultirange Value (Multirange UTCTime)
A.tstzmultirange_float Value (Multirange UTCTime)
A.tstzmultirange_int)
{-# INLINEABLE datemultirange #-}
datemultirange :: Value (R.Multirange Day)
datemultirange :: Value (Multirange Day)
datemultirange = Value (Multirange Day) -> Value (Multirange Day)
forall a. Value a -> Value a
Value (Text
-> PTI
-> Value (Multirange Day)
-> Value (Multirange Day)
-> Value (Multirange Day)
forall a. Text -> PTI -> Value a -> Value a -> Value a
Value.unsafePTI Text
"datemultirange" PTI
PTI.datemultirange Value (Multirange Day)
A.datemultirange Value (Multirange Day)
A.datemultirange)
{-# INLINEABLE custom #-}
custom :: (Bool -> ByteString -> Either Text a) -> Value a
custom :: forall a. (Bool -> ByteString -> Either Text a) -> Value a
custom Bool -> ByteString -> Either Text a
fn = Value a -> Value a
forall a. Value a -> Value a
Value ((Bool -> ByteString -> Either Text a) -> Value a
forall a. (Bool -> ByteString -> Either Text a) -> Value a
Value.decoderFn Bool -> ByteString -> Either Text a
fn)
{-# INLINEABLE refine #-}
refine :: (a -> Either Text b) -> Value a -> Value b
refine :: forall a b. (a -> Either Text b) -> Value a -> Value b
refine a -> Either Text b
fn (Value Value a
v) = Value b -> Value b
forall a. Value a -> Value a
Value ((a -> Either Text b) -> Value a -> Value b
forall a b. (a -> Either Text b) -> Value a -> Value b
Value.refine a -> Either Text b
fn Value a
v)
{-# INLINEABLE hstore #-}
hstore :: (forall m. (Monad m) => Int -> m (Text, Maybe Text) -> m a) -> Value a
hstore :: forall a.
(forall (m :: * -> *).
Monad m =>
Int -> m (Text, Maybe Text) -> m a)
-> Value a
hstore forall (m :: * -> *). Monad m => Int -> m (Text, Maybe Text) -> m a
replicateM = Value a -> Value a
forall a. Value a -> Value a
Value (Value a -> Value a
forall a. Value a -> Value a
Value.decoder ((forall (m :: * -> *).
Monad m =>
Int -> m (Text, Maybe Text) -> m a)
-> Value Text -> Value Text -> Value a
forall k v r.
(forall (m :: * -> *). Monad m => Int -> m (k, Maybe v) -> m r)
-> Value k -> Value v -> Value r
A.hstore Int -> m (Text, Maybe Text) -> m a
forall (m :: * -> *). Monad m => Int -> m (Text, Maybe Text) -> m a
replicateM Value Text
A.text_strict Value Text
A.text_strict))
enum :: (Text -> Maybe a) -> Value a
enum :: forall a. (Text -> Maybe a) -> Value a
enum Text -> Maybe a
mapping = Value a -> Value a
forall a. Value a -> Value a
Value (Value a -> Value a
forall a. Value a -> Value a
Value.decoder ((Text -> Maybe a) -> Value a
forall a. (Text -> Maybe a) -> Value a
A.enum Text -> Maybe a
mapping))
{-# INLINEABLE array #-}
array :: Array a -> Value a
array :: forall a. Array a -> Value a
array (Array Array a
imp) = Value a -> Value a
forall a. Value a -> Value a
Value (Text -> Maybe OID -> Maybe OID -> Value a -> Value a -> Value a
forall a.
Text -> Maybe OID -> Maybe OID -> Value a -> Value a -> Value a
Value.Value Text
"unknown" Maybe OID
forall a. Maybe a
Nothing Maybe OID
forall a. Maybe a
Nothing (Array a -> Bool -> Value a
forall a. Array a -> Bool -> Value a
Array.run Array a
imp Bool
False) (Array a -> Bool -> Value a
forall a. Array a -> Bool -> Value a
Array.run Array a
imp Bool
True))
{-# INLINE listArray #-}
listArray :: NullableOrNot Value element -> Value [element]
listArray :: forall element. NullableOrNot Value element -> Value [element]
listArray = Array [element] -> Value [element]
forall a. Array a -> Value a
array (Array [element] -> Value [element])
-> (NullableOrNot Value element -> Array [element])
-> NullableOrNot Value element
-> Value [element]
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (forall (m :: * -> *). Monad m => Int -> m element -> m [element])
-> Array element -> Array [element]
forall a b.
(forall (m :: * -> *). Monad m => Int -> m a -> m b)
-> Array a -> Array b
dimension Int -> m element -> m [element]
forall (m :: * -> *). Monad m => Int -> m element -> m [element]
forall (m :: * -> *) a. Applicative m => Int -> m a -> m [a]
replicateM (Array element -> Array [element])
-> (NullableOrNot Value element -> Array element)
-> NullableOrNot Value element
-> Array [element]
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. NullableOrNot Value element -> Array element
forall a. NullableOrNot Value a -> Array a
element
{-# INLINE vectorArray #-}
vectorArray :: (GenericVector.Vector vector element) => NullableOrNot Value element -> Value (vector element)
vectorArray :: forall (vector :: * -> *) element.
Vector vector element =>
NullableOrNot Value element -> Value (vector element)
vectorArray = Array (vector element) -> Value (vector element)
forall a. Array a -> Value a
array (Array (vector element) -> Value (vector element))
-> (NullableOrNot Value element -> Array (vector element))
-> NullableOrNot Value element
-> Value (vector element)
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (forall (m :: * -> *).
Monad m =>
Int -> m element -> m (vector element))
-> Array element -> Array (vector element)
forall a b.
(forall (m :: * -> *). Monad m => Int -> m a -> m b)
-> Array a -> Array b
dimension Int -> m element -> m (vector element)
forall (m :: * -> *).
Monad m =>
Int -> m element -> m (vector element)
forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v a) =>
Int -> m a -> m (v a)
GenericVector.replicateM (Array element -> Array (vector element))
-> (NullableOrNot Value element -> Array element)
-> NullableOrNot Value element
-> Array (vector element)
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. NullableOrNot Value element -> Array element
forall a. NullableOrNot Value a -> Array a
element
{-# INLINEABLE composite #-}
composite :: Composite a -> Value a
composite :: forall a. Composite a -> Value a
composite (Composite Composite a
imp) = Value a -> Value a
forall a. Value a -> Value a
Value (Text -> Maybe OID -> Maybe OID -> Value a -> Value a -> Value a
forall a.
Text -> Maybe OID -> Maybe OID -> Value a -> Value a -> Value a
Value.Value Text
"unknown" Maybe OID
forall a. Maybe a
Nothing Maybe OID
forall a. Maybe a
Nothing (Composite a -> Bool -> Value a
forall a. Composite a -> Bool -> Value a
Composite.run Composite a
imp Bool
False) (Composite a -> Bool -> Value a
forall a. Composite a -> Bool -> Value a
Composite.run Composite a
imp Bool
True))
newtype Array a = Array (Array.Array a)
deriving ((forall a b. (a -> b) -> Array a -> Array b)
-> (forall a b. a -> Array b -> Array a) -> Functor Array
forall a b. a -> Array b -> Array a
forall a b. (a -> b) -> Array a -> Array b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Array a -> Array b
fmap :: forall a b. (a -> b) -> Array a -> Array b
$c<$ :: forall a b. a -> Array b -> Array a
<$ :: forall a b. a -> Array b -> Array a
Functor)
{-# INLINEABLE dimension #-}
dimension :: (forall m. (Monad m) => Int -> m a -> m b) -> Array a -> Array b
dimension :: forall a b.
(forall (m :: * -> *). Monad m => Int -> m a -> m b)
-> Array a -> Array b
dimension forall (m :: * -> *). Monad m => Int -> m a -> m b
replicateM (Array Array a
imp) = Array b -> Array b
forall a. Array a -> Array a
Array ((forall (m :: * -> *). Monad m => Int -> m a -> m b)
-> Array a -> Array b
forall a b.
(forall (m :: * -> *). Monad m => Int -> m a -> m b)
-> Array a -> Array b
Array.dimension Int -> m a -> m b
forall (m :: * -> *). Monad m => Int -> m a -> m b
replicateM Array a
imp)
{-# INLINEABLE element #-}
element :: NullableOrNot Value a -> Array a
element :: forall a. NullableOrNot Value a -> Array a
element = \case
NonNullable (Value Value a
imp) -> Array a -> Array a
forall a. Array a -> Array a
Array ((Bool -> Value a) -> Array a
forall a. (Bool -> Value a) -> Array a
Array.nonNullValue (Value a -> Bool -> Value a
forall a. Value a -> Bool -> Value a
Value.run Value a
imp))
Nullable (Value Value a
imp) -> Array a -> Array a
forall a. Array a -> Array a
Array ((Bool -> Value a) -> Array (Maybe a)
forall a. (Bool -> Value a) -> Array (Maybe a)
Array.value (Value a -> Bool -> Value a
forall a. Value a -> Bool -> Value a
Value.run Value a
imp))
newtype Composite a = Composite (Composite.Composite a)
deriving ((forall a b. (a -> b) -> Composite a -> Composite b)
-> (forall a b. a -> Composite b -> Composite a)
-> Functor Composite
forall a b. a -> Composite b -> Composite a
forall a b. (a -> b) -> Composite a -> Composite b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Composite a -> Composite b
fmap :: forall a b. (a -> b) -> Composite a -> Composite b
$c<$ :: forall a b. a -> Composite b -> Composite a
<$ :: forall a b. a -> Composite b -> Composite a
Functor, Functor Composite
Functor Composite =>
(forall a. a -> Composite a)
-> (forall a b. Composite (a -> b) -> Composite a -> Composite b)
-> (forall a b c.
(a -> b -> c) -> Composite a -> Composite b -> Composite c)
-> (forall a b. Composite a -> Composite b -> Composite b)
-> (forall a b. Composite a -> Composite b -> Composite a)
-> Applicative Composite
forall a. a -> Composite a
forall a b. Composite a -> Composite b -> Composite a
forall a b. Composite a -> Composite b -> Composite b
forall a b. Composite (a -> b) -> Composite a -> Composite b
forall a b c.
(a -> b -> c) -> Composite a -> Composite b -> Composite c
forall (f :: * -> *).
Functor f =>
(forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
$cpure :: forall a. a -> Composite a
pure :: forall a. a -> Composite a
$c<*> :: forall a b. Composite (a -> b) -> Composite a -> Composite b
<*> :: forall a b. Composite (a -> b) -> Composite a -> Composite b
$cliftA2 :: forall a b c.
(a -> b -> c) -> Composite a -> Composite b -> Composite c
liftA2 :: forall a b c.
(a -> b -> c) -> Composite a -> Composite b -> Composite c
$c*> :: forall a b. Composite a -> Composite b -> Composite b
*> :: forall a b. Composite a -> Composite b -> Composite b
$c<* :: forall a b. Composite a -> Composite b -> Composite a
<* :: forall a b. Composite a -> Composite b -> Composite a
Applicative, Applicative Composite
Applicative Composite =>
(forall a b. Composite a -> (a -> Composite b) -> Composite b)
-> (forall a b. Composite a -> Composite b -> Composite b)
-> (forall a. a -> Composite a)
-> Monad Composite
forall a. a -> Composite a
forall a b. Composite a -> Composite b -> Composite b
forall a b. Composite a -> (a -> Composite b) -> Composite b
forall (m :: * -> *).
Applicative m =>
(forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
$c>>= :: forall a b. Composite a -> (a -> Composite b) -> Composite b
>>= :: forall a b. Composite a -> (a -> Composite b) -> Composite b
$c>> :: forall a b. Composite a -> Composite b -> Composite b
>> :: forall a b. Composite a -> Composite b -> Composite b
$creturn :: forall a. a -> Composite a
return :: forall a. a -> Composite a
Monad, Monad Composite
Monad Composite =>
(forall a. String -> Composite a) -> MonadFail Composite
forall a. String -> Composite a
forall (m :: * -> *).
Monad m =>
(forall a. String -> m a) -> MonadFail m
$cfail :: forall a. String -> Composite a
fail :: forall a. String -> Composite a
MonadFail)
field :: NullableOrNot Value a -> Composite a
field :: forall a. NullableOrNot Value a -> Composite a
field = \case
NonNullable (Value Value a
imp) -> Composite a -> Composite a
forall a. Composite a -> Composite a
Composite ((Bool -> Value a) -> Composite a
forall a. (Bool -> Value a) -> Composite a
Composite.nonNullValue (Value a -> Bool -> Value a
forall a. Value a -> Bool -> Value a
Value.run Value a
imp))
Nullable (Value Value a
imp) -> Composite a -> Composite a
forall a. Composite a -> Composite a
Composite ((Bool -> Value a) -> Composite (Maybe a)
forall a. (Bool -> Value a) -> Composite (Maybe a)
Composite.value (Value a -> Bool -> Value a
forall a. Value a -> Bool -> Value a
Value.run Value a
imp))