Add "foldableArray" encoder

This commit is contained in:
Nikita Volkov 2019-05-21 19:01:18 +03:00
parent 38e80351e6
commit 799fbca0ed
2 changed files with 21 additions and 0 deletions

View File

@ -17,6 +17,7 @@ module Hasql.Encoders
-- * Value
Value,
array,
foldableArray,
bool,
int2,
int4,

View File

@ -122,6 +122,26 @@ array (Array (Array.Array valueOID arrayOID arrayEncoder renderer)) = let
encoder env input = A.array (PTI.oidWord32 valueOID) (arrayEncoder env input)
in Value (Value.Value arrayOID arrayOID encoder renderer)
{-|
Lift a value encoder of element into a unidimensional array encoder of a foldable value.
E.g.,
@
vectorOfInts :: Value (Vector Int64)
vectorOfInts = 'foldableArray' ('nonNullable' 'int8')
@
This function is merely a shortcut for the following expression:
@
('array' . 'dimension' 'foldl'' . 'element')
@
-}
{-# INLINE foldableArray #-}
foldableArray :: Foldable foldable => NullableOrNot Value a -> Value (foldable a)
foldableArray = array . dimension foldl' . element
{-|
Encoder of @BOOL@ values.
-}