on 421fe3f help sign in
rel8/src/Rel8/Expr/Array.hs
58 lines 1.5 kB history raw
1{-# language DataKinds #-}
2{-# language FlexibleContexts #-}
3{-# language TypeFamilies #-}
5{-# options_ghc -fno-warn-redundant-constraints #-}
7module Rel8.Expr.Array
8 ( listOf, nonEmptyOf
9 , slistOf, snonEmptyOf
10 , sappend, sappend1, sempty
11 )
12where
14-- base
15import Data.List.NonEmpty ( NonEmpty )
16import Prelude
18-- opaleye
19import qualified Opaleye.Internal.HaskellDB.PrimQuery as Opaleye
21-- rel8
22import {-# SOURCE #-} Rel8.Expr ( Expr )
23import Rel8.Expr.Opaleye
24 ( fromPrimExpr, toPrimExpr
25 , zipPrimExprsWith
26 )
27import Rel8.Type ( DBType, typeInformation )
28import Rel8.Type.Array ( array )
29import Rel8.Type.Information ( TypeInformation(..) )
30import Rel8.Schema.Null ( Unnullify, Sql )
33sappend :: Expr [a] -> Expr [a] -> Expr [a]
34sappend = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:||))
37sappend1 :: Expr (NonEmpty a) -> Expr (NonEmpty a) -> Expr (NonEmpty a)
38sappend1 = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:||))
41sempty :: TypeInformation (Unnullify a) -> Expr [a]
42sempty info = fromPrimExpr $ array info []
45slistOf :: TypeInformation (Unnullify a) -> [Expr a] -> Expr [a]
46slistOf info = fromPrimExpr . array info . fmap toPrimExpr
49snonEmptyOf :: TypeInformation (Unnullify a) -> NonEmpty (Expr a) -> Expr (NonEmpty a)
50snonEmptyOf info = fromPrimExpr . array info . fmap toPrimExpr
53listOf :: Sql DBType a => [Expr a] -> Expr [a]
54listOf = slistOf typeInformation
57nonEmptyOf :: Sql DBType a => NonEmpty (Expr a) -> Expr (NonEmpty a)
58nonEmptyOf = snonEmptyOf typeInformation