{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
module Database.Relational.Projectable (
SqlContext (unsafeProjectSqlTerms), unsafeProjectSql',
unsafeProjectSql,
value,
valueTrue, valueFalse,
values,
nothing,
PlaceHolders, unsafeAddPlaceHolders, unsafePlaceHolders,
pwPlaceholder, placeholder', placeholder, unitPlaceHolder, unitPH,
unsafeShowSql', unsafeShowSql,
(.=.), (.<.), (.<=.), (.>.), (.>=.), (.<>.),
and', or', in',
(.||.), (?||?), like, likeMaybe, like', likeMaybe',
(.+.), (.-.), (.*.), (./.),
(?+?), (?-?), (?*?), (?/?),
isNothing, isJust, fromMaybe,
not', exists,
negate', fromIntegral', showNum,
negateMaybe, fromIntegralMaybe, showNumMaybe,
casesOrElse, casesOrElse',
caseSearch, caseSearchMaybe, case', caseMaybe,
SqlBinOp, unsafeBinOp, unsafeUniOp,
rank, denseRank, rowNumber, percentRank, cumeDist,
projectZip, (><),
ProjectableMaybe (just, flattenMaybe),
ProjectableFlattenMaybe (flatten),
flattenPiMaybe,
(!), (?), (??), (?!), (?!?), (!??),
unsafeAggregateOp,
count,
sum', sumMaybe, avg, avgMaybe,
max', maxMaybe, min', minMaybe,
every, any', some',
) where
import Prelude hiding (pi)
import Data.String (IsString)
import Data.Functor.ProductIsomorphic
((|$|), ProductIsoApplicative, pureP, (|*|), )
import Language.SQL.Keyword (Keyword)
import qualified Language.SQL.Keyword as SQL
import Database.Record
(PersistableWidth, persistableWidth, PersistableRecordWidth,
HasColumnConstraint, NotNull)
import Database.Record.Persistable (runPersistableRecordWidth)
import Database.Relational.Internal.ContextType (Flat, Exists, OverWindow)
import Database.Relational.Internal.String (StringSQL, stringSQL, showStringSQL)
import Database.Relational.SqlSyntax (Record, Predicate)
import qualified Database.Relational.SqlSyntax as Syntax
import Database.Relational.Pure ()
import Database.Relational.TupleInstances ()
import Database.Relational.Pi (Pi)
import Database.Relational.ProjectableClass
(LiteralSQL, showLiteral, )
import Database.Relational.Record (RecordList)
import qualified Database.Relational.Record as Record
import Database.Relational.Projectable.Unsafe
(SqlContext (..), OperatorContext, AggregatedContext, PlaceHolders (..))
import Database.Relational.Projectable.Instances ()
unsafeProjectSql' :: SqlContext c => StringSQL -> Record c t
unsafeProjectSql' :: forall c t. SqlContext c => StringSQL -> Record c t
unsafeProjectSql' = forall c t. SqlContext c => [StringSQL] -> Record c t
unsafeProjectSqlTerms forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. a -> [a] -> [a]
:[])
unsafeProjectSql :: SqlContext c => String -> Record c t
unsafeProjectSql :: forall c t. SqlContext c => String -> Record c t
unsafeProjectSql = forall c t. SqlContext c => StringSQL -> Record c t
unsafeProjectSql' forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> StringSQL
stringSQL
nothing :: (OperatorContext c, SqlContext c, PersistableWidth a)
=> Record c (Maybe a)
nothing :: forall c a.
(OperatorContext c, SqlContext c, PersistableWidth a) =>
Record c (Maybe a)
nothing = forall c a.
SqlContext c =>
PersistableRecordWidth a -> Record c (Maybe a)
proxyWidth forall a. PersistableWidth a => PersistableRecordWidth a
persistableWidth
where
proxyWidth :: SqlContext c => PersistableRecordWidth a -> Record c (Maybe a)
proxyWidth :: forall c a.
SqlContext c =>
PersistableRecordWidth a -> Record c (Maybe a)
proxyWidth PersistableRecordWidth a
w = forall c t. SqlContext c => [StringSQL] -> Record c t
unsafeProjectSqlTerms forall a b. (a -> b) -> a -> b
$ forall a. Int -> a -> [a]
replicate (forall a. PersistableRecordWidth a -> Int
runPersistableRecordWidth PersistableRecordWidth a
w) StringSQL
SQL.NULL
value :: (LiteralSQL t, OperatorContext c) => t -> Record c t
value :: forall t c. (LiteralSQL t, OperatorContext c) => t -> Record c t
value = forall c t. SqlContext c => [StringSQL] -> Record c t
unsafeProjectSqlTerms forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. LiteralSQL a => a -> [StringSQL]
showLiteral
valueTrue :: OperatorContext c => Record c (Maybe Bool)
valueTrue :: forall c. OperatorContext c => Record c (Maybe Bool)
valueTrue = forall (p :: * -> *) a. ProjectableMaybe p => p a -> p (Maybe a)
just forall a b. (a -> b) -> a -> b
$ forall t c. (LiteralSQL t, OperatorContext c) => t -> Record c t
value Bool
True
valueFalse :: OperatorContext c => Record c (Maybe Bool)
valueFalse :: forall c. OperatorContext c => Record c (Maybe Bool)
valueFalse = forall (p :: * -> *) a. ProjectableMaybe p => p a -> p (Maybe a)
just forall a b. (a -> b) -> a -> b
$ forall t c. (LiteralSQL t, OperatorContext c) => t -> Record c t
value Bool
False
values :: (LiteralSQL t, OperatorContext c) => [t] -> RecordList (Record c) t
values :: forall t c.
(LiteralSQL t, OperatorContext c) =>
[t] -> RecordList (Record c) t
values = forall (p :: * -> *) t. [p t] -> RecordList p t
Record.list forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map forall t c. (LiteralSQL t, OperatorContext c) => t -> Record c t
value
unsafeShowSql' :: Record c a -> StringSQL
unsafeShowSql' :: forall c a. Record c a -> StringSQL
unsafeShowSql' = forall c a. Record c a -> StringSQL
Record.unsafeStringSql
unsafeShowSql :: Record c a
-> String
unsafeShowSql :: forall c a. Record c a -> String
unsafeShowSql = StringSQL -> String
showStringSQL forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall c a. Record c a -> StringSQL
unsafeShowSql'
type SqlBinOp = Keyword -> Keyword -> Keyword
unsafeUniOp :: SqlContext c2
=> (Keyword -> Keyword) -> Record c1 a -> Record c2 b
unsafeUniOp :: forall c2 c1 a b.
SqlContext c2 =>
(StringSQL -> StringSQL) -> Record c1 a -> Record c2 b
unsafeUniOp StringSQL -> StringSQL
u = forall c t. SqlContext c => StringSQL -> Record c t
unsafeProjectSql' forall b c a. (b -> c) -> (a -> b) -> a -> c
. StringSQL -> StringSQL
u forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall c a. Record c a -> StringSQL
unsafeShowSql'
unsafeFlatUniOp :: SqlContext c
=> Keyword -> Record c a -> Record c b
unsafeFlatUniOp :: forall c a b. SqlContext c => StringSQL -> Record c a -> Record c b
unsafeFlatUniOp StringSQL
kw = forall c2 c1 a b.
SqlContext c2 =>
(StringSQL -> StringSQL) -> Record c1 a -> Record c2 b
unsafeUniOp (StringSQL -> StringSQL
SQL.paren forall b c a. (b -> c) -> (a -> b) -> a -> c
. StringSQL -> StringSQL -> StringSQL
SQL.defineUniOp StringSQL
kw)
unsafeBinOp :: SqlContext k
=> SqlBinOp
-> Record k a -> Record k b -> Record k c
unsafeBinOp :: forall k a b c.
SqlContext k =>
(StringSQL -> StringSQL -> StringSQL)
-> Record k a -> Record k b -> Record k c
unsafeBinOp StringSQL -> StringSQL -> StringSQL
op Record k a
a Record k b
b = forall c t. SqlContext c => StringSQL -> Record c t
unsafeProjectSql' forall b c a. (b -> c) -> (a -> b) -> a -> c
. StringSQL -> StringSQL
SQL.paren forall a b. (a -> b) -> a -> b
$
StringSQL -> StringSQL -> StringSQL
op (forall c a. Record c a -> StringSQL
unsafeShowSql' Record k a
a) (forall c a. Record c a -> StringSQL
unsafeShowSql' Record k b
b)
compareBinOp :: SqlContext c
=> SqlBinOp
-> Record c a -> Record c a -> Record c (Maybe Bool)
compareBinOp :: forall c a.
SqlContext c =>
(StringSQL -> StringSQL -> StringSQL)
-> Record c a -> Record c a -> Record c (Maybe Bool)
compareBinOp = forall k a b c.
SqlContext k =>
(StringSQL -> StringSQL -> StringSQL)
-> Record k a -> Record k b -> Record k c
unsafeBinOp
monoBinOp :: SqlContext c
=> SqlBinOp
-> Record c a -> Record c a -> Record c a
monoBinOp :: forall c a.
SqlContext c =>
(StringSQL -> StringSQL -> StringSQL)
-> Record c a -> Record c a -> Record c a
monoBinOp = forall k a b c.
SqlContext k =>
(StringSQL -> StringSQL -> StringSQL)
-> Record k a -> Record k b -> Record k c
unsafeBinOp
(.=.) :: OperatorContext c
=> Record c ft -> Record c ft -> Record c (Maybe Bool)
.=. :: forall c ft.
OperatorContext c =>
Record c ft -> Record c ft -> Record c (Maybe Bool)
(.=.) = forall c a.
SqlContext c =>
(StringSQL -> StringSQL -> StringSQL)
-> Record c a -> Record c a -> Record c (Maybe Bool)
compareBinOp StringSQL -> StringSQL -> StringSQL
(SQL..=.)
(.<.) :: OperatorContext c
=> Record c ft -> Record c ft -> Record c (Maybe Bool)
.<. :: forall c ft.
OperatorContext c =>
Record c ft -> Record c ft -> Record c (Maybe Bool)
(.<.) = forall c a.
SqlContext c =>
(StringSQL -> StringSQL -> StringSQL)
-> Record c a -> Record c a -> Record c (Maybe Bool)
compareBinOp StringSQL -> StringSQL -> StringSQL
(SQL..<.)
(.<=.) :: OperatorContext c
=> Record c ft -> Record c ft -> Record c (Maybe Bool)
.<=. :: forall c ft.
OperatorContext c =>
Record c ft -> Record c ft -> Record c (Maybe Bool)
(.<=.) = forall c a.
SqlContext c =>
(StringSQL -> StringSQL -> StringSQL)
-> Record c a -> Record c a -> Record c (Maybe Bool)
compareBinOp StringSQL -> StringSQL -> StringSQL
(SQL..<=.)
(.>.) :: OperatorContext c
=> Record c ft -> Record c ft -> Record c (Maybe Bool)
.>. :: forall c ft.
OperatorContext c =>
Record c ft -> Record c ft -> Record c (Maybe Bool)
(.>.) = forall c a.
SqlContext c =>
(StringSQL -> StringSQL -> StringSQL)
-> Record c a -> Record c a -> Record c (Maybe Bool)
compareBinOp StringSQL -> StringSQL -> StringSQL
(SQL..>.)
(.>=.) :: OperatorContext c
=> Record c ft -> Record c ft -> Record c (Maybe Bool)
.>=. :: forall c ft.
OperatorContext c =>
Record c ft -> Record c ft -> Record c (Maybe Bool)
(.>=.) = forall c a.
SqlContext c =>
(StringSQL -> StringSQL -> StringSQL)
-> Record c a -> Record c a -> Record c (Maybe Bool)
compareBinOp StringSQL -> StringSQL -> StringSQL
(SQL..>=.)
(.<>.) :: OperatorContext c
=> Record c ft -> Record c ft -> Record c (Maybe Bool)
.<>. :: forall c ft.
OperatorContext c =>
Record c ft -> Record c ft -> Record c (Maybe Bool)
(.<>.) = forall c a.
SqlContext c =>
(StringSQL -> StringSQL -> StringSQL)
-> Record c a -> Record c a -> Record c (Maybe Bool)
compareBinOp StringSQL -> StringSQL -> StringSQL
(SQL..<>.)
and' :: OperatorContext c
=> Record c (Maybe Bool) -> Record c (Maybe Bool) -> Record c (Maybe Bool)
and' :: forall c.
OperatorContext c =>
Record c (Maybe Bool)
-> Record c (Maybe Bool) -> Record c (Maybe Bool)
and' = forall c a.
SqlContext c =>
(StringSQL -> StringSQL -> StringSQL)
-> Record c a -> Record c a -> Record c a
monoBinOp StringSQL -> StringSQL -> StringSQL
SQL.and
or' :: OperatorContext c
=> Record c (Maybe Bool) -> Record c (Maybe Bool) -> Record c (Maybe Bool)
or' :: forall c.
OperatorContext c =>
Record c (Maybe Bool)
-> Record c (Maybe Bool) -> Record c (Maybe Bool)
or' = forall c a.
SqlContext c =>
(StringSQL -> StringSQL -> StringSQL)
-> Record c a -> Record c a -> Record c a
monoBinOp StringSQL -> StringSQL -> StringSQL
SQL.or
not' :: OperatorContext c
=> Record c (Maybe Bool) -> Record c (Maybe Bool)
not' :: forall c.
OperatorContext c =>
Record c (Maybe Bool) -> Record c (Maybe Bool)
not' = forall c a b. SqlContext c => StringSQL -> Record c a -> Record c b
unsafeFlatUniOp StringSQL
SQL.NOT
exists :: OperatorContext c
=> RecordList (Record Exists) r -> Record c (Maybe Bool)
exists :: forall c r.
OperatorContext c =>
RecordList (Record Exists) r -> Record c (Maybe Bool)
exists = forall c t. SqlContext c => StringSQL -> Record c t
unsafeProjectSql' forall b c a. (b -> c) -> (a -> b) -> a -> c
. StringSQL -> StringSQL
SQL.paren forall b c a. (b -> c) -> (a -> b) -> a -> c
. StringSQL -> StringSQL -> StringSQL
SQL.defineUniOp StringSQL
SQL.EXISTS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (p :: * -> *) t.
(p t -> StringSQL) -> RecordList p t -> StringSQL
Record.unsafeStringSqlList forall c a. Record c a -> StringSQL
unsafeShowSql'
(.||.) :: OperatorContext c
=> Record c a -> Record c a -> Record c a
.||. :: forall c a.
OperatorContext c =>
Record c a -> Record c a -> Record c a
(.||.) = forall k a b c.
SqlContext k =>
(StringSQL -> StringSQL -> StringSQL)
-> Record k a -> Record k b -> Record k c
unsafeBinOp StringSQL -> StringSQL -> StringSQL
(SQL..||.)
(?||?) :: (OperatorContext c, IsString a)
=> Record c (Maybe a) -> Record c (Maybe a) -> Record c (Maybe a)
?||? :: forall c a.
(OperatorContext c, IsString a) =>
Record c (Maybe a) -> Record c (Maybe a) -> Record c (Maybe a)
(?||?) = forall k a b c.
SqlContext k =>
(StringSQL -> StringSQL -> StringSQL)
-> Record k a -> Record k b -> Record k c
unsafeBinOp StringSQL -> StringSQL -> StringSQL
(SQL..||.)
unsafeLike :: OperatorContext c
=> Record c a -> Record c b -> Record c (Maybe Bool)
unsafeLike :: forall c a b.
OperatorContext c =>
Record c a -> Record c b -> Record c (Maybe Bool)
unsafeLike = forall k a b c.
SqlContext k =>
(StringSQL -> StringSQL -> StringSQL)
-> Record k a -> Record k b -> Record k c
unsafeBinOp (StringSQL -> StringSQL -> StringSQL -> StringSQL
SQL.defineBinOp StringSQL
SQL.LIKE)
like' :: (OperatorContext c, IsString a)
=> Record c a -> Record c a -> Record c (Maybe Bool)
Record c a
x like' :: forall c a.
(OperatorContext c, IsString a) =>
Record c a -> Record c a -> Record c (Maybe Bool)
`like'` Record c a
y = Record c a
x forall c a b.
OperatorContext c =>
Record c a -> Record c b -> Record c (Maybe Bool)
`unsafeLike` Record c a
y
likeMaybe' :: (OperatorContext c, IsString a)
=> Record c (Maybe a) -> Record c (Maybe a) -> Record c (Maybe Bool)
Record c (Maybe a)
x likeMaybe' :: forall c a.
(OperatorContext c, IsString a) =>
Record c (Maybe a) -> Record c (Maybe a) -> Record c (Maybe Bool)
`likeMaybe'` Record c (Maybe a)
y = Record c (Maybe a)
x forall c a b.
OperatorContext c =>
Record c a -> Record c b -> Record c (Maybe Bool)
`unsafeLike` Record c (Maybe a)
y
like :: (OperatorContext c, IsString a, LiteralSQL a)
=> Record c a -> a -> Record c (Maybe Bool)
Record c a
x like :: forall c a.
(OperatorContext c, IsString a, LiteralSQL a) =>
Record c a -> a -> Record c (Maybe Bool)
`like` a
a = Record c a
x forall c a.
(OperatorContext c, IsString a) =>
Record c a -> Record c a -> Record c (Maybe Bool)
`like'` forall t c. (LiteralSQL t, OperatorContext c) => t -> Record c t
value a
a
likeMaybe :: (OperatorContext c, IsString a, LiteralSQL a)
=> Record c (Maybe a) -> a -> Record c (Maybe Bool)
Record c (Maybe a)
x likeMaybe :: forall c a.
(OperatorContext c, IsString a, LiteralSQL a) =>
Record c (Maybe a) -> a -> Record c (Maybe Bool)
`likeMaybe` a
a = Record c (Maybe a)
x forall c a b.
OperatorContext c =>
Record c a -> Record c b -> Record c (Maybe Bool)
`unsafeLike` forall t c. (LiteralSQL t, OperatorContext c) => t -> Record c t
value a
a
monoBinOp' :: SqlContext c
=> Keyword -> Record c a -> Record c a -> Record c a
monoBinOp' :: forall c a.
SqlContext c =>
StringSQL -> Record c a -> Record c a -> Record c a
monoBinOp' = forall c a.
SqlContext c =>
(StringSQL -> StringSQL -> StringSQL)
-> Record c a -> Record c a -> Record c a
monoBinOp forall b c a. (b -> c) -> (a -> b) -> a -> c
. StringSQL -> StringSQL -> StringSQL -> StringSQL
SQL.defineBinOp
(.+.) :: (OperatorContext c, Num a)
=> Record c a -> Record c a -> Record c a
.+. :: forall c a.
(OperatorContext c, Num a) =>
Record c a -> Record c a -> Record c a
(.+.) = forall c a.
SqlContext c =>
StringSQL -> Record c a -> Record c a -> Record c a
monoBinOp' StringSQL
"+"
(.-.) :: (OperatorContext c, Num a)
=> Record c a -> Record c a -> Record c a
.-. :: forall c a.
(OperatorContext c, Num a) =>
Record c a -> Record c a -> Record c a
(.-.) = forall c a.
SqlContext c =>
StringSQL -> Record c a -> Record c a -> Record c a
monoBinOp' StringSQL
"-"
(./.) :: (OperatorContext c, Num a)
=> Record c a -> Record c a -> Record c a
./. :: forall c a.
(OperatorContext c, Num a) =>
Record c a -> Record c a -> Record c a
(./.) = forall c a.
SqlContext c =>
StringSQL -> Record c a -> Record c a -> Record c a
monoBinOp' StringSQL
"/"
(.*.) :: (OperatorContext c, Num a)
=> Record c a -> Record c a -> Record c a
.*. :: forall c a.
(OperatorContext c, Num a) =>
Record c a -> Record c a -> Record c a
(.*.) = forall c a.
SqlContext c =>
StringSQL -> Record c a -> Record c a -> Record c a
monoBinOp' StringSQL
"*"
negate' :: (OperatorContext c, Num a)
=> Record c a -> Record c a
negate' :: forall c a. (OperatorContext c, Num a) => Record c a -> Record c a
negate' = forall c a b. SqlContext c => StringSQL -> Record c a -> Record c b
unsafeFlatUniOp forall a b. (a -> b) -> a -> b
$ String -> StringSQL
SQL.word String
"-"
unsafeCastProjectable :: SqlContext c
=> Record c a -> Record c b
unsafeCastProjectable :: forall c a b. SqlContext c => Record c a -> Record c b
unsafeCastProjectable = forall c t. Tuple -> Record c t
Syntax.record forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall c t. Record c t -> Tuple
Syntax.untypeRecord
fromIntegral' :: (SqlContext c, Integral a, Num b)
=> Record c a -> Record c b
fromIntegral' :: forall c a b.
(SqlContext c, Integral a, Num b) =>
Record c a -> Record c b
fromIntegral' = forall c a b. SqlContext c => Record c a -> Record c b
unsafeCastProjectable
showNum :: (SqlContext c, Num a, IsString b)
=> Record c a -> Record c b
showNum :: forall c a b.
(SqlContext c, Num a, IsString b) =>
Record c a -> Record c b
showNum = forall c a b. SqlContext c => Record c a -> Record c b
unsafeCastProjectable
(?+?) :: (OperatorContext c, Num a)
=> Record c (Maybe a) -> Record c (Maybe a) -> Record c (Maybe a)
?+? :: forall c a.
(OperatorContext c, Num a) =>
Record c (Maybe a) -> Record c (Maybe a) -> Record c (Maybe a)
(?+?) = forall c a.
SqlContext c =>
StringSQL -> Record c a -> Record c a -> Record c a
monoBinOp' StringSQL
"+"
(?-?) :: (OperatorContext c, Num a)
=> Record c (Maybe a) -> Record c (Maybe a) -> Record c (Maybe a)
?-? :: forall c a.
(OperatorContext c, Num a) =>
Record c (Maybe a) -> Record c (Maybe a) -> Record c (Maybe a)
(?-?) = forall c a.
SqlContext c =>
StringSQL -> Record c a -> Record c a -> Record c a
monoBinOp' StringSQL
"-"
(?/?) :: (OperatorContext c, Num a)
=> Record c (Maybe a) -> Record c (Maybe a) -> Record c (Maybe a)
?/? :: forall c a.
(OperatorContext c, Num a) =>
Record c (Maybe a) -> Record c (Maybe a) -> Record c (Maybe a)
(?/?) = forall c a.
SqlContext c =>
StringSQL -> Record c a -> Record c a -> Record c a
monoBinOp' StringSQL
"/"
(?*?) :: (OperatorContext c, Num a)
=> Record c (Maybe a) -> Record c (Maybe a) -> Record c (Maybe a)
?*? :: forall c a.
(OperatorContext c, Num a) =>
Record c (Maybe a) -> Record c (Maybe a) -> Record c (Maybe a)
(?*?) = forall c a.
SqlContext c =>
StringSQL -> Record c a -> Record c a -> Record c a
monoBinOp' StringSQL
"*"
negateMaybe :: (OperatorContext c, Num a)
=> Record c (Maybe a) -> Record c (Maybe a)
negateMaybe :: forall c a.
(OperatorContext c, Num a) =>
Record c (Maybe a) -> Record c (Maybe a)
negateMaybe = forall c a b. SqlContext c => StringSQL -> Record c a -> Record c b
unsafeFlatUniOp forall a b. (a -> b) -> a -> b
$ String -> StringSQL
SQL.word String
"-"
fromIntegralMaybe :: (SqlContext c, Integral a, Num b)
=> Record c (Maybe a) -> Record c (Maybe b)
fromIntegralMaybe :: forall c a b.
(SqlContext c, Integral a, Num b) =>
Record c (Maybe a) -> Record c (Maybe b)
fromIntegralMaybe = forall c a b. SqlContext c => Record c a -> Record c b
unsafeCastProjectable
showNumMaybe :: (SqlContext c, Num a, IsString b)
=> Record c (Maybe a) -> Record c (Maybe b)
showNumMaybe :: forall c a b.
(SqlContext c, Num a, IsString b) =>
Record c (Maybe a) -> Record c (Maybe b)
showNumMaybe = forall c a b. SqlContext c => Record c a -> Record c b
unsafeCastProjectable
caseSearch :: OperatorContext c
=> [(Predicate c, Record c a)]
-> Record c a
-> Record c a
caseSearch :: forall c a.
OperatorContext c =>
[(Predicate c, Record c a)] -> Record c a -> Record c a
caseSearch = forall c a. [(Predicate c, Record c a)] -> Record c a -> Record c a
Syntax.caseSearch
casesOrElse :: OperatorContext c
=> [(Predicate c, Record c a)]
-> Record c a
-> Record c a
casesOrElse :: forall c a.
OperatorContext c =>
[(Predicate c, Record c a)] -> Record c a -> Record c a
casesOrElse = forall c a.
OperatorContext c =>
[(Predicate c, Record c a)] -> Record c a -> Record c a
caseSearch
caseSearchMaybe :: (OperatorContext c , PersistableWidth a)
=> [(Predicate c, Record c (Maybe a))]
-> Record c (Maybe a)
caseSearchMaybe :: forall c a.
(OperatorContext c, PersistableWidth a) =>
[(Predicate c, Record c (Maybe a))] -> Record c (Maybe a)
caseSearchMaybe [(Predicate c, Record c (Maybe a))]
cs = forall c a.
OperatorContext c =>
[(Predicate c, Record c a)] -> Record c a -> Record c a
caseSearch [(Predicate c, Record c (Maybe a))]
cs forall c a.
(OperatorContext c, SqlContext c, PersistableWidth a) =>
Record c (Maybe a)
nothing
case' :: OperatorContext c
=> Record c a
-> [(Record c a, Record c b)]
-> Record c b
-> Record c b
case' :: forall c a b.
OperatorContext c =>
Record c a
-> [(Record c a, Record c b)] -> Record c b -> Record c b
case' = forall c a b.
Record c a
-> [(Record c a, Record c b)] -> Record c b -> Record c b
Syntax.case'
casesOrElse' :: OperatorContext c
=> (Record c a, [(Record c a, Record c b)])
-> Record c b
-> Record c b
casesOrElse' :: forall c a b.
OperatorContext c =>
(Record c a, [(Record c a, Record c b)])
-> Record c b -> Record c b
casesOrElse' = forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall c a b.
OperatorContext c =>
Record c a
-> [(Record c a, Record c b)] -> Record c b -> Record c b
case'
caseMaybe :: (OperatorContext c , PersistableWidth b)
=> Record c a
-> [(Record c a, Record c (Maybe b))]
-> Record c (Maybe b)
caseMaybe :: forall c b a.
(OperatorContext c, PersistableWidth b) =>
Record c a
-> [(Record c a, Record c (Maybe b))] -> Record c (Maybe b)
caseMaybe Record c a
v [(Record c a, Record c (Maybe b))]
cs = forall c a b.
OperatorContext c =>
Record c a
-> [(Record c a, Record c b)] -> Record c b -> Record c b
case' Record c a
v [(Record c a, Record c (Maybe b))]
cs forall c a.
(OperatorContext c, SqlContext c, PersistableWidth a) =>
Record c (Maybe a)
nothing
in' :: OperatorContext c
=> Record c t -> RecordList (Record c) t -> Record c (Maybe Bool)
in' :: forall c t.
OperatorContext c =>
Record c t -> RecordList (Record c) t -> Record c (Maybe Bool)
in' Record c t
a RecordList (Record c) t
lp = forall c t. SqlContext c => StringSQL -> Record c t
unsafeProjectSql' forall b c a. (b -> c) -> (a -> b) -> a -> c
. StringSQL -> StringSQL
SQL.paren
forall a b. (a -> b) -> a -> b
$ StringSQL -> StringSQL -> StringSQL
SQL.in' (forall c a. Record c a -> StringSQL
unsafeShowSql' Record c t
a) (forall (p :: * -> *) t.
(p t -> StringSQL) -> RecordList p t -> StringSQL
Record.unsafeStringSqlList forall c a. Record c a -> StringSQL
unsafeShowSql' RecordList (Record c) t
lp)
isNothing :: (OperatorContext c, HasColumnConstraint NotNull r)
=> Record c (Maybe r) -> Predicate c
isNothing :: forall c r.
(OperatorContext c, HasColumnConstraint NotNull r) =>
Record c (Maybe r) -> Predicate c
isNothing Record c (Maybe r)
mr = forall c t. SqlContext c => StringSQL -> Record c t
unsafeProjectSql' forall a b. (a -> b) -> a -> b
$
StringSQL -> StringSQL
SQL.paren forall a b. (a -> b) -> a -> b
$ (StringSQL -> StringSQL -> StringSQL -> StringSQL
SQL.defineBinOp StringSQL
SQL.IS)
(forall r c.
HasColumnConstraint NotNull r =>
Record c (Maybe r) -> StringSQL
Record.unsafeStringSqlNotNullMaybe Record c (Maybe r)
mr) StringSQL
SQL.NULL
isJust :: (OperatorContext c, HasColumnConstraint NotNull r)
=> Record c (Maybe r) -> Predicate c
isJust :: forall c r.
(OperatorContext c, HasColumnConstraint NotNull r) =>
Record c (Maybe r) -> Predicate c
isJust = forall c.
OperatorContext c =>
Record c (Maybe Bool) -> Record c (Maybe Bool)
not' forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall c r.
(OperatorContext c, HasColumnConstraint NotNull r) =>
Record c (Maybe r) -> Predicate c
isNothing
fromMaybe :: (OperatorContext c, HasColumnConstraint NotNull r)
=> Record c r -> Record c (Maybe r) -> Record c r
fromMaybe :: forall c r.
(OperatorContext c, HasColumnConstraint NotNull r) =>
Record c r -> Record c (Maybe r) -> Record c r
fromMaybe Record c r
d Record c (Maybe r)
p = [ (forall c r.
(OperatorContext c, HasColumnConstraint NotNull r) =>
Record c (Maybe r) -> Predicate c
isNothing Record c (Maybe r)
p, Record c r
d) ] forall c a.
OperatorContext c =>
[(Predicate c, Record c a)] -> Record c a -> Record c a
`casesOrElse` forall c a b. SqlContext c => Record c a -> Record c b
unsafeCastProjectable Record c (Maybe r)
p
unsafeUniTermFunction :: SqlContext c => Keyword -> Record c t
unsafeUniTermFunction :: forall c t. SqlContext c => StringSQL -> Record c t
unsafeUniTermFunction = forall c t. SqlContext c => StringSQL -> Record c t
unsafeProjectSql' forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StringSQL -> StringSQL -> StringSQL
SQL.<++> String -> StringSQL
stringSQL String
"()")
rank :: Integral a => Record OverWindow a
rank :: forall a. Integral a => Record OverWindow a
rank = forall c t. SqlContext c => StringSQL -> Record c t
unsafeUniTermFunction StringSQL
SQL.RANK
denseRank :: Integral a => Record OverWindow a
denseRank :: forall a. Integral a => Record OverWindow a
denseRank = forall c t. SqlContext c => StringSQL -> Record c t
unsafeUniTermFunction StringSQL
SQL.DENSE_RANK
rowNumber :: Integral a => Record OverWindow a
rowNumber :: forall a. Integral a => Record OverWindow a
rowNumber = forall c t. SqlContext c => StringSQL -> Record c t
unsafeUniTermFunction StringSQL
SQL.ROW_NUMBER
percentRank :: Record OverWindow Double
percentRank :: Record OverWindow Double
percentRank = forall c t. SqlContext c => StringSQL -> Record c t
unsafeUniTermFunction StringSQL
SQL.PERCENT_RANK
cumeDist :: Record OverWindow Double
cumeDist :: Record OverWindow Double
cumeDist = forall c t. SqlContext c => StringSQL -> Record c t
unsafeUniTermFunction StringSQL
SQL.CUME_DIST
unsafeAddPlaceHolders :: Functor f => f a -> f (PlaceHolders p, a)
unsafeAddPlaceHolders :: forall (f :: * -> *) a p. Functor f => f a -> f (PlaceHolders p, a)
unsafeAddPlaceHolders = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((,) forall p. PlaceHolders p
PlaceHolders)
unsafePlaceHolders :: PlaceHolders p
unsafePlaceHolders :: forall p. PlaceHolders p
unsafePlaceHolders = forall p. PlaceHolders p
PlaceHolders
unitPlaceHolder :: PlaceHolders ()
unitPlaceHolder :: PlaceHolders ()
unitPlaceHolder = forall (f :: * -> *) a.
(ProductIsoApplicative f, ProductConstructor a) =>
a -> f a
pureP ()
unitPH :: PlaceHolders ()
unitPH :: PlaceHolders ()
unitPH = forall (f :: * -> *) a.
(ProductIsoApplicative f, ProductConstructor a) =>
a -> f a
pureP ()
unsafeCastPlaceHolders :: PlaceHolders a -> PlaceHolders b
unsafeCastPlaceHolders :: forall a b. PlaceHolders a -> PlaceHolders b
unsafeCastPlaceHolders PlaceHolders a
PlaceHolders = forall p. PlaceHolders p
PlaceHolders
pwPlaceholder :: SqlContext c
=> PersistableRecordWidth a
-> (Record c a -> b)
-> (PlaceHolders a, b)
pwPlaceholder :: forall c a b.
SqlContext c =>
PersistableRecordWidth a
-> (Record c a -> b) -> (PlaceHolders a, b)
pwPlaceholder PersistableRecordWidth a
pw Record c a -> b
f = (forall p. PlaceHolders p
PlaceHolders, Record c a -> b
f forall a b. (a -> b) -> a -> b
$ forall c a. SqlContext c => PersistableRecordWidth a -> Record c a
projectPlaceHolder PersistableRecordWidth a
pw)
where
projectPlaceHolder :: SqlContext c
=> PersistableRecordWidth a
-> Record c a
projectPlaceHolder :: forall c a. SqlContext c => PersistableRecordWidth a -> Record c a
projectPlaceHolder = forall c t. SqlContext c => [StringSQL] -> Record c t
unsafeProjectSqlTerms forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. Int -> a -> [a]
`replicate` StringSQL
"?") forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. PersistableRecordWidth a -> Int
runPersistableRecordWidth
placeholder' :: (PersistableWidth t, SqlContext c) => (Record c t -> a) -> (PlaceHolders t, a)
placeholder' :: forall t c a.
(PersistableWidth t, SqlContext c) =>
(Record c t -> a) -> (PlaceHolders t, a)
placeholder' = forall c a b.
SqlContext c =>
PersistableRecordWidth a
-> (Record c a -> b) -> (PlaceHolders a, b)
pwPlaceholder forall a. PersistableWidth a => PersistableRecordWidth a
persistableWidth
placeholder :: (PersistableWidth t, SqlContext c, Monad m) => (Record c t -> m a) -> m (PlaceHolders t, a)
placeholder :: forall t c (m :: * -> *) a.
(PersistableWidth t, SqlContext c, Monad m) =>
(Record c t -> m a) -> m (PlaceHolders t, a)
placeholder Record c t -> m a
f = do
let (PlaceHolders t
ph, m a
ma) = forall t c a.
(PersistableWidth t, SqlContext c) =>
(Record c t -> a) -> (PlaceHolders t, a)
placeholder' Record c t -> m a
f
a
a <- m a
ma
forall (m :: * -> *) a. Monad m => a -> m a
return (PlaceHolders t
ph, a
a)
projectZip :: ProductIsoApplicative p => p a -> p b -> p (a, b)
projectZip :: forall (p :: * -> *) a b.
ProductIsoApplicative p =>
p a -> p b -> p (a, b)
projectZip p a
pa p b
pb = (,) forall (f :: * -> *) a b.
(ProductIsoFunctor f, ProductConstructor (a -> b)) =>
(a -> b) -> f a -> f b
|$| p a
pa forall (f :: * -> *) a b.
ProductIsoApplicative f =>
f (a -> b) -> f a -> f b
|*| p b
pb
(><) :: ProductIsoApplicative p => p a -> p b -> p (a, b)
>< :: forall (p :: * -> *) a b.
ProductIsoApplicative p =>
p a -> p b -> p (a, b)
(><) = forall (p :: * -> *) a b.
ProductIsoApplicative p =>
p a -> p b -> p (a, b)
projectZip
class ProjectableMaybe p where
just :: p a -> p (Maybe a)
flattenMaybe :: p (Maybe (Maybe a)) -> p (Maybe a)
instance ProjectableMaybe PlaceHolders where
just :: forall a. PlaceHolders a -> PlaceHolders (Maybe a)
just = forall a b. PlaceHolders a -> PlaceHolders b
unsafeCastPlaceHolders
flattenMaybe :: forall a. PlaceHolders (Maybe (Maybe a)) -> PlaceHolders (Maybe a)
flattenMaybe = forall a b. PlaceHolders a -> PlaceHolders b
unsafeCastPlaceHolders
instance ProjectableMaybe (Record c) where
just :: forall a. Record c a -> Record c (Maybe a)
just = forall c a. Record c a -> Record c (Maybe a)
Record.just
flattenMaybe :: forall a. Record c (Maybe (Maybe a)) -> Record c (Maybe a)
flattenMaybe = forall c a. Record c (Maybe (Maybe a)) -> Record c (Maybe a)
Record.flattenMaybe
unsafeAggregateOp :: (AggregatedContext ac, SqlContext ac)
=> SQL.Keyword -> Record Flat a -> Record ac b
unsafeAggregateOp :: forall ac a b.
(AggregatedContext ac, SqlContext ac) =>
StringSQL -> Record Flat a -> Record ac b
unsafeAggregateOp StringSQL
op = forall c2 c1 a b.
SqlContext c2 =>
(StringSQL -> StringSQL) -> Record c1 a -> Record c2 b
unsafeUniOp ((StringSQL
op StringSQL -> StringSQL -> StringSQL
SQL.<++>) forall b c a. (b -> c) -> (a -> b) -> a -> c
. StringSQL -> StringSQL
SQL.paren)
count :: (Integral b, AggregatedContext ac, SqlContext ac)
=> Record Flat a -> Record ac b
count :: forall b ac a.
(Integral b, AggregatedContext ac, SqlContext ac) =>
Record Flat a -> Record ac b
count = forall ac a b.
(AggregatedContext ac, SqlContext ac) =>
StringSQL -> Record Flat a -> Record ac b
unsafeAggregateOp StringSQL
SQL.COUNT
sumMaybe :: (Num a, AggregatedContext ac, SqlContext ac)
=> Record Flat (Maybe a) -> Record ac (Maybe a)
sumMaybe :: forall a ac.
(Num a, AggregatedContext ac, SqlContext ac) =>
Record Flat (Maybe a) -> Record ac (Maybe a)
sumMaybe = forall ac a b.
(AggregatedContext ac, SqlContext ac) =>
StringSQL -> Record Flat a -> Record ac b
unsafeAggregateOp StringSQL
SQL.SUM
sum' :: (Num a, AggregatedContext ac, SqlContext ac)
=> Record Flat a -> Record ac (Maybe a)
sum' :: forall a ac.
(Num a, AggregatedContext ac, SqlContext ac) =>
Record Flat a -> Record ac (Maybe a)
sum' = forall a ac.
(Num a, AggregatedContext ac, SqlContext ac) =>
Record Flat (Maybe a) -> Record ac (Maybe a)
sumMaybe forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall c a. Record c a -> Record c (Maybe a)
Record.just
avgMaybe :: (Num a, Fractional b, AggregatedContext ac, SqlContext ac)
=> Record Flat (Maybe a) -> Record ac (Maybe b)
avgMaybe :: forall a b ac.
(Num a, Fractional b, AggregatedContext ac, SqlContext ac) =>
Record Flat (Maybe a) -> Record ac (Maybe b)
avgMaybe = forall ac a b.
(AggregatedContext ac, SqlContext ac) =>
StringSQL -> Record Flat a -> Record ac b
unsafeAggregateOp StringSQL
SQL.AVG
avg :: (Num a, Fractional b, AggregatedContext ac, SqlContext ac)
=> Record Flat a -> Record ac (Maybe b)
avg :: forall a b ac.
(Num a, Fractional b, AggregatedContext ac, SqlContext ac) =>
Record Flat a -> Record ac (Maybe b)
avg = forall a b ac.
(Num a, Fractional b, AggregatedContext ac, SqlContext ac) =>
Record Flat (Maybe a) -> Record ac (Maybe b)
avgMaybe forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall c a. Record c a -> Record c (Maybe a)
Record.just
maxMaybe :: (Ord a, AggregatedContext ac, SqlContext ac)
=> Record Flat (Maybe a) -> Record ac (Maybe a)
maxMaybe :: forall a ac.
(Ord a, AggregatedContext ac, SqlContext ac) =>
Record Flat (Maybe a) -> Record ac (Maybe a)
maxMaybe = forall ac a b.
(AggregatedContext ac, SqlContext ac) =>
StringSQL -> Record Flat a -> Record ac b
unsafeAggregateOp StringSQL
SQL.MAX
max' :: (Ord a, AggregatedContext ac, SqlContext ac)
=> Record Flat a -> Record ac (Maybe a)
max' :: forall a ac.
(Ord a, AggregatedContext ac, SqlContext ac) =>
Record Flat a -> Record ac (Maybe a)
max' = forall a ac.
(Ord a, AggregatedContext ac, SqlContext ac) =>
Record Flat (Maybe a) -> Record ac (Maybe a)
maxMaybe forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall c a. Record c a -> Record c (Maybe a)
Record.just
minMaybe :: (Ord a, AggregatedContext ac, SqlContext ac)
=> Record Flat (Maybe a) -> Record ac (Maybe a)
minMaybe :: forall a ac.
(Ord a, AggregatedContext ac, SqlContext ac) =>
Record Flat (Maybe a) -> Record ac (Maybe a)
minMaybe = forall ac a b.
(AggregatedContext ac, SqlContext ac) =>
StringSQL -> Record Flat a -> Record ac b
unsafeAggregateOp StringSQL
SQL.MIN
min' :: (Ord a, AggregatedContext ac, SqlContext ac)
=> Record Flat a -> Record ac (Maybe a)
min' :: forall a ac.
(Ord a, AggregatedContext ac, SqlContext ac) =>
Record Flat a -> Record ac (Maybe a)
min' = forall a ac.
(Ord a, AggregatedContext ac, SqlContext ac) =>
Record Flat (Maybe a) -> Record ac (Maybe a)
minMaybe forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall c a. Record c a -> Record c (Maybe a)
Record.just
every :: (AggregatedContext ac, SqlContext ac)
=> Predicate Flat -> Record ac (Maybe Bool)
every :: forall ac.
(AggregatedContext ac, SqlContext ac) =>
Predicate Flat -> Record ac (Maybe Bool)
every = forall ac a b.
(AggregatedContext ac, SqlContext ac) =>
StringSQL -> Record Flat a -> Record ac b
unsafeAggregateOp StringSQL
SQL.EVERY
any' :: (AggregatedContext ac, SqlContext ac)
=> Predicate Flat -> Record ac (Maybe Bool)
any' :: forall ac.
(AggregatedContext ac, SqlContext ac) =>
Predicate Flat -> Record ac (Maybe Bool)
any' = forall ac a b.
(AggregatedContext ac, SqlContext ac) =>
StringSQL -> Record Flat a -> Record ac b
unsafeAggregateOp StringSQL
SQL.ANY
some' :: (AggregatedContext ac, SqlContext ac)
=> Predicate Flat -> Record ac (Maybe Bool)
some' :: forall ac.
(AggregatedContext ac, SqlContext ac) =>
Predicate Flat -> Record ac (Maybe Bool)
some' = forall ac a b.
(AggregatedContext ac, SqlContext ac) =>
StringSQL -> Record Flat a -> Record ac b
unsafeAggregateOp StringSQL
SQL.SOME
(!) :: PersistableWidth a
=> Record c a
-> Pi a b
-> Record c b
! :: forall a c b.
PersistableWidth a =>
Record c a -> Pi a b -> Record c b
(!) = forall a c b.
PersistableWidth a =>
Record c a -> Pi a b -> Record c b
Record.pi
(?!) :: PersistableWidth a
=> Record c (Maybe a)
-> Pi a b
-> Record c (Maybe b)
?! :: forall a c b.
PersistableWidth a =>
Record c (Maybe a) -> Pi a b -> Record c (Maybe b)
(?!) = forall a c b.
PersistableWidth a =>
Record c (Maybe a) -> Pi a b -> Record c (Maybe b)
Record.piMaybe
(?!?) :: PersistableWidth a
=> Record c (Maybe a)
-> Pi a (Maybe b)
-> Record c (Maybe b)
?!? :: forall a c b.
PersistableWidth a =>
Record c (Maybe a) -> Pi a (Maybe b) -> Record c (Maybe b)
(?!?) = forall a c b.
PersistableWidth a =>
Record c (Maybe a) -> Pi a (Maybe b) -> Record c (Maybe b)
Record.piMaybe'
class ProjectableFlattenMaybe a b where
flatten :: ProjectableMaybe p => p a -> p b
instance ProjectableFlattenMaybe (Maybe a) b
=> ProjectableFlattenMaybe (Maybe (Maybe a)) b where
flatten :: forall (p :: * -> *).
ProjectableMaybe p =>
p (Maybe (Maybe a)) -> p b
flatten = forall a b (p :: * -> *).
(ProjectableFlattenMaybe a b, ProjectableMaybe p) =>
p a -> p b
flatten forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (p :: * -> *) a.
ProjectableMaybe p =>
p (Maybe (Maybe a)) -> p (Maybe a)
flattenMaybe
instance ProjectableFlattenMaybe (Maybe a) (Maybe a) where
flatten :: forall (p :: * -> *).
ProjectableMaybe p =>
p (Maybe a) -> p (Maybe a)
flatten = forall a. a -> a
id
flattenPiMaybe :: (PersistableWidth a, ProjectableFlattenMaybe (Maybe b) c)
=> Record cont (Maybe a)
-> Pi a b
-> Record cont c
flattenPiMaybe :: forall a b c cont.
(PersistableWidth a, ProjectableFlattenMaybe (Maybe b) c) =>
Record cont (Maybe a) -> Pi a b -> Record cont c
flattenPiMaybe Record cont (Maybe a)
p = forall a b (p :: * -> *).
(ProjectableFlattenMaybe a b, ProjectableMaybe p) =>
p a -> p b
flatten forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a c b.
PersistableWidth a =>
Record c (Maybe a) -> Pi a b -> Record c (Maybe b)
Record.piMaybe Record cont (Maybe a)
p
(!??) :: (PersistableWidth a, ProjectableFlattenMaybe (Maybe b) c)
=> Record cont (Maybe a)
-> Pi a b
-> Record cont c
!?? :: forall a b c cont.
(PersistableWidth a, ProjectableFlattenMaybe (Maybe b) c) =>
Record cont (Maybe a) -> Pi a b -> Record cont c
(!??) = forall a b c cont.
(PersistableWidth a, ProjectableFlattenMaybe (Maybe b) c) =>
Record cont (Maybe a) -> Pi a b -> Record cont c
flattenPiMaybe
(?) :: PersistableWidth a
=> Record c (Maybe a)
-> Pi a b
-> Record c (Maybe b)
? :: forall a c b.
PersistableWidth a =>
Record c (Maybe a) -> Pi a b -> Record c (Maybe b)
(?) = forall a c b.
PersistableWidth a =>
Record c (Maybe a) -> Pi a b -> Record c (Maybe b)
(?!)
(??) :: PersistableWidth a
=> Record c (Maybe a)
-> Pi a (Maybe b)
-> Record c (Maybe b)
?? :: forall a c b.
PersistableWidth a =>
Record c (Maybe a) -> Pi a (Maybe b) -> Record c (Maybe b)
(??) = forall a c b.
PersistableWidth a =>
Record c (Maybe a) -> Pi a (Maybe b) -> Record c (Maybe b)
(?!?)
infixl 8 !, ?, ??, ?!, ?!?, !??
infixl 7 .*., ./., ?*?, ?/?
infixl 6 .+., .-., ?+?, ?-?
infixl 5 .||., ?||?
infix 4 .=., .<>., .>., .>=., .<., .<=., `in'`, `like`, `likeMaybe`, `like'`, `likeMaybe'`
infixr 3 `and'`
infixr 2 `or'`
infixl 1 ><