module Lsql.Csv.Core.Functions
(
Arg(Symbol, Function, Value),
Function (AritmeticF, AggregateF, LogicF),
AritmeticF(
Sin, Cos, Tan, Asin, Acos, Atan,
Sinh, Cosh, Tanh, Asinh, Acosh, Atanh,
Exp, Sqrt,
Size, ToString, Append,
Round, Truncate, Ceiling, Floor,
MinusS, Abs, Signum, Negate,
Plus, Minus, Multiply, Divide, Power,
Even, Odd,
NaturalPower, Div, Quot, Rem, Mod, Gcd, Lcm,
Less, LessOrEqual, More, MoreOrEqual,
Equal, NotEqual, LeftOuterJoin, In
),
LogicF(And, Or, Not),
AggregateF(Cat, Sum, Avg, Count, Min, Max),
Printable (ColumnP, ValueP),
genStrCols, getCols, getTable, printTable, unionAggCols,
appendArg, catterate,
eval, evalAggregateFunctions, containsAggregateF
) where
import Lsql.Csv.Core.Tables
import Lsql.Csv.Core.Symbols
import Data.List
data Arg =
Function Function
| Symbol String
| Value Value
data Function =
AritmeticF AritmeticF |
AggregateF AggregateF |
LogicF LogicF
data Printable = ColumnP Column | ValueP Value
deriving (Printable -> Printable -> Bool
(Printable -> Printable -> Bool)
-> (Printable -> Printable -> Bool) -> Eq Printable
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Printable -> Printable -> Bool
== :: Printable -> Printable -> Bool
$c/= :: Printable -> Printable -> Bool
/= :: Printable -> Printable -> Bool
Eq, Eq Printable
Eq Printable =>
(Printable -> Printable -> Ordering)
-> (Printable -> Printable -> Bool)
-> (Printable -> Printable -> Bool)
-> (Printable -> Printable -> Bool)
-> (Printable -> Printable -> Bool)
-> (Printable -> Printable -> Printable)
-> (Printable -> Printable -> Printable)
-> Ord Printable
Printable -> Printable -> Bool
Printable -> Printable -> Ordering
Printable -> Printable -> Printable
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Printable -> Printable -> Ordering
compare :: Printable -> Printable -> Ordering
$c< :: Printable -> Printable -> Bool
< :: Printable -> Printable -> Bool
$c<= :: Printable -> Printable -> Bool
<= :: Printable -> Printable -> Bool
$c> :: Printable -> Printable -> Bool
> :: Printable -> Printable -> Bool
$c>= :: Printable -> Printable -> Bool
>= :: Printable -> Printable -> Bool
$cmax :: Printable -> Printable -> Printable
max :: Printable -> Printable -> Printable
$cmin :: Printable -> Printable -> Printable
min :: Printable -> Printable -> Printable
Ord, Int -> Printable -> ShowS
[Printable] -> ShowS
Printable -> String
(Int -> Printable -> ShowS)
-> (Printable -> String)
-> ([Printable] -> ShowS)
-> Show Printable
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Printable -> ShowS
showsPrec :: Int -> Printable -> ShowS
$cshow :: Printable -> String
show :: Printable -> String
$cshowList :: [Printable] -> ShowS
showList :: [Printable] -> ShowS
Show)
data AritmeticF =
Sin Arg | Cos Arg | Tan Arg | Asin Arg | Acos Arg | Atan Arg|
Sinh Arg | Cosh Arg | Tanh Arg | Asinh Arg | Acosh Arg | Atanh Arg|
Exp Arg | Sqrt Arg |
Size Arg | ToString Arg | Append Arg Arg |
Round Arg | Truncate Arg | Ceiling Arg | Floor Arg |
MinusS Arg | Abs Arg | Signum Arg | Negate Arg |
Plus Arg Arg | Minus Arg Arg | Multiply Arg Arg | Divide Arg Arg |
Power Arg Arg |
Even Arg | Odd Arg |
NaturalPower Arg Arg | Div Arg Arg | Quot Arg Arg | Rem Arg Arg |
Mod Arg Arg | Gcd Arg Arg | Lcm Arg Arg |
Less Arg Arg | LessOrEqual Arg Arg | More Arg Arg | MoreOrEqual Arg Arg |
Equal Arg Arg | NotEqual Arg Arg | LeftOuterJoin Arg Arg |
In Arg Arg
data LogicF = And Arg Arg | Or Arg Arg | Not Arg
data AggregateF = Cat [Arg] | Sum [Arg] | Avg [Arg] | Count [Arg] |
Min [Arg] | Max [Arg]
pShow :: Int -> Printable -> [String]
pShow :: Int -> Printable -> [String]
pShow Int
n (ValueP Value
v) = Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
take Int
n([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ String -> [String]
forall a. a -> [a]
repeat(String -> [String]) -> String -> [String]
forall a b. (a -> b) -> a -> b
$ Value -> String
forall a. Show a => a -> String
show Value
v
pShow Int
n (ColumnP Column
c) = Int -> [String] -> [String]
forall a. Int -> [a] -> [a]
take Int
n([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ Column -> [String]
showColumn Column
c
genStrCols :: [Printable] -> [[String]]
genStrCols :: [Printable] -> [[String]]
genStrCols [Printable]
cols = (Printable -> [String]) -> [Printable] -> [[String]]
forall a b. (a -> b) -> [a] -> [b]
map (Int -> Printable -> [String]
pShow Int
n) [Printable]
cols
where
n :: Int
n = [Printable] -> Int
getPrintableLength [Printable]
cols
getCols :: [Printable] -> [Column]
getCols :: [Printable] -> [Column]
getCols [Printable]
printables =
[Printable] -> [Column]
toCols [Printable]
printables
where
n :: Int
n = [Printable] -> Int
getPrintableLength [Printable]
printables
toCols :: [Printable] -> [Column]
toCols :: [Printable] -> [Column]
toCols [] = []
toCols ((ColumnP Column
c) : [Printable]
rest) = Column
c Column -> [Column] -> [Column]
forall a. a -> [a] -> [a]
: ([Printable] -> [Column]
toCols [Printable]
rest)
toCols ((ValueP Value
v) : [Printable]
rest) = ([String] -> [Value] -> Column
Column [] (Int -> [Value] -> [Value]
forall a. Int -> [a] -> [a]
take Int
n([Value] -> [Value]) -> [Value] -> [Value]
forall a b. (a -> b) -> a -> b
$ Value -> [Value]
forall a. a -> [a]
repeat Value
v)) Column -> [Column] -> [Column]
forall a. a -> [a] -> [a]
: ([Printable] -> [Column]
toCols [Printable]
rest)
getTable :: [String]
-> [Printable]
-> Table
getTable :: [String] -> [Printable] -> Table
getTable [String]
names [Printable]
printables = [String] -> [Column] -> Table
Table [String]
names ([Printable] -> [Column]
getCols [Printable]
printables)
printTable :: Table -> [Printable]
printTable :: Table -> [Printable]
printTable (Table [String]
_ [Column]
cols) = (Column -> Printable) -> [Column] -> [Printable]
forall a b. (a -> b) -> [a] -> [b]
map Column -> Printable
ColumnP [Column]
cols
genOnelineCols :: [Printable] -> [Printable]
genOnelineCols :: [Printable] -> [Printable]
genOnelineCols [] = []
genOnelineCols (ColumnP (Column [String]
_ (Value
val : [Value]
_)) : [Printable]
rest) =
(Value -> Printable
ValueP Value
val) Printable -> [Printable] -> [Printable]
forall a. a -> [a] -> [a]
: ([Printable] -> [Printable]
genOnelineCols [Printable]
rest)
genOnelineCols ((ValueP Value
val) : [Printable]
rest) = (Value -> Printable
ValueP Value
val) Printable -> [Printable] -> [Printable]
forall a. a -> [a] -> [a]
: ([Printable] -> [Printable]
genOnelineCols [Printable]
rest)
printableColumnnide :: Printable -> Printable
printableColumnnide :: Printable -> Printable
printableColumnnide (ValueP Value
p) = Column -> Printable
ColumnP(Column -> Printable) -> Column -> Printable
forall a b. (a -> b) -> a -> b
$ [String] -> [Value] -> Column
Column [] [Value
p]
printableColumnnide Printable
p = Printable
p
appendPrintable :: Printable -> Printable -> Printable
appendPrintable :: Printable -> Printable -> Printable
appendPrintable Printable
a0 Printable
b0 =
let a :: Printable
a = Printable -> Printable
printableColumnnide Printable
a0 in
let b :: Printable
b = Printable -> Printable
printableColumnnide Printable
b0 in
Printable -> Printable -> Printable
doAppend Printable
a Printable
b
where
doAppend :: Printable -> Printable -> Printable
doAppend :: Printable -> Printable -> Printable
doAppend (ColumnP (Column [String]
ns [Value]
a)) (ColumnP (Column [String]
_ [Value]
b)) =
Column -> Printable
ColumnP ([String] -> [Value] -> Column
Column [String]
ns ([Value]
a [Value] -> [Value] -> [Value]
forall a. [a] -> [a] -> [a]
++ [Value]
b))
unionCols :: [[Printable]] -> [Printable]
unionCols :: [[Printable]] -> [Printable]
unionCols [[Printable]]
cols
| [[Printable]] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [[Printable]]
cols = []
| Bool
otherwise = ([Printable] -> [Printable] -> [Printable])
-> [[Printable]] -> [Printable]
forall a. (a -> a -> a) -> [a] -> a
forall (t :: * -> *) a. Foldable t => (a -> a -> a) -> t a -> a
foldl1 [Printable] -> [Printable] -> [Printable]
col2union [[Printable]]
cols
where
col2union :: [Printable] -> [Printable] -> [Printable]
col2union :: [Printable] -> [Printable] -> [Printable]
col2union [] [] = []
col2union (Printable
a : [Printable]
rest_a) (Printable
b : [Printable]
rest_b) =
(Printable
a Printable -> Printable -> Printable
`appendPrintable` Printable
b) Printable -> [Printable] -> [Printable]
forall a. a -> [a] -> [a]
: ([Printable] -> [Printable] -> [Printable]
col2union [Printable]
rest_a [Printable]
rest_b)
unionAggCols :: [[Printable]] -> [Printable]
unionAggCols :: [[Printable]] -> [Printable]
unionAggCols [[Printable]]
cols =
[[Printable]] -> [Printable]
unionCols([[Printable]] -> [Printable]) -> [[Printable]] -> [Printable]
forall a b. (a -> b) -> a -> b
$ ([Printable] -> [Printable]) -> [[Printable]] -> [[Printable]]
forall a b. (a -> b) -> [a] -> [b]
map [Printable] -> [Printable]
genOnelineCols [[Printable]]
cols
applyInOpP :: (Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP :: (Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP Value -> Value -> Value
op (ColumnP Column
c1) (ColumnP Column
c2) =
Column -> Printable
ColumnP(Column -> Printable) -> Column -> Printable
forall a b. (a -> b) -> a -> b
$ (Value -> Value -> Value) -> Column -> Column -> Column
applyInOp Value -> Value -> Value
op Column
c1 Column
c2
applyInOpP Value -> Value -> Value
op (ColumnP Column
c1) (ValueP Value
c2) =
Column -> Printable
ColumnP(Column -> Printable) -> Column -> Printable
forall a b. (a -> b) -> a -> b
$ (Value -> Value -> Value) -> Column -> Column -> Column
applyInOp Value -> Value -> Value
op Column
c1 ([String] -> [Value] -> Column
Column [String
"gen"]([Value] -> Column) -> [Value] -> Column
forall a b. (a -> b) -> a -> b
$ Value -> [Value]
forall a. a -> [a]
repeat Value
c2)
applyInOpP Value -> Value -> Value
op (ValueP Value
c1) (ColumnP Column
c2) =
Column -> Printable
ColumnP(Column -> Printable) -> Column -> Printable
forall a b. (a -> b) -> a -> b
$ (Value -> Value -> Value) -> Column -> Column -> Column
applyInOp Value -> Value -> Value
op ([String] -> [Value] -> Column
Column [String
"gen"]([Value] -> Column) -> [Value] -> Column
forall a b. (a -> b) -> a -> b
$ Value -> [Value]
forall a. a -> [a]
repeat Value
c1) Column
c2
applyInOpP Value -> Value -> Value
op (ValueP Value
c1) (ValueP Value
c2) = Value -> Printable
ValueP(Value -> Printable) -> Value -> Printable
forall a b. (a -> b) -> a -> b
$ Value -> Value -> Value
op Value
c1 Value
c2
applyOpP :: (Value -> Value) -> Printable -> Printable
applyOpP :: (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
op (ColumnP Column
c) = Column -> Printable
ColumnP(Column -> Printable) -> Column -> Printable
forall a b. (a -> b) -> a -> b
$ (Value -> Value) -> Column -> Column
applyOp Value -> Value
op Column
c
applyOpP Value -> Value
op (ValueP Value
c) = Value -> Printable
ValueP(Value -> Printable) -> Value -> Printable
forall a b. (a -> b) -> a -> b
$ Value -> Value
op Value
c
catterate :: [Arg] -> Arg
catterate :: [Arg] -> Arg
catterate [Arg]
args = (Arg -> Arg -> Arg) -> [Arg] -> Arg
forall a. (a -> a -> a) -> [a] -> a
forall (t :: * -> *) a. Foldable t => (a -> a -> a) -> t a -> a
foldl1 Arg -> Arg -> Arg
appendArg [Arg]
args
appendArg :: Arg -> Arg -> Arg
appendArg :: Arg -> Arg -> Arg
appendArg Arg
a Arg
b = Function -> Arg
Function(Function -> Arg) -> Function -> Arg
forall a b. (a -> b) -> a -> b
$ AritmeticF -> Function
AritmeticF(AritmeticF -> Function) -> AritmeticF -> Function
forall a b. (a -> b) -> a -> b
$ Arg -> Arg -> AritmeticF
Append Arg
a Arg
b
getPrintableLength :: [Printable] -> Int
getPrintableLength :: [Printable] -> Int
getPrintableLength [] = Int
1
getPrintableLength ((ValueP Value
p) : [Printable]
rest) = [Printable] -> Int
getPrintableLength [Printable]
rest
getPrintableLength ((ColumnP Column
c) : [Printable]
_ ) = [String] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length([String] -> Int) -> [String] -> Int
forall a b. (a -> b) -> a -> b
$ Column -> [String]
showColumn Column
c
eval :: SymbolMap -> Arg -> Printable
eval :: SymbolMap -> Arg -> Printable
eval SymbolMap
symbol_map (Symbol String
name) = Column -> Printable
ColumnP(Column -> Printable) -> Column -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap
symbol_map SymbolMap -> String -> Column
==> String
name
eval SymbolMap
_ (Value Value
val) = Value -> Printable
ValueP(Value -> Printable) -> Value -> Printable
forall a b. (a -> b) -> a -> b
$ Value
val
eval SymbolMap
symbol_map (Function Function
f) = SymbolMap -> Function -> Printable
evalFunction SymbolMap
symbol_map Function
f
evalFunction :: SymbolMap -> Function -> Printable
evalFunction :: SymbolMap -> Function -> Printable
evalFunction SymbolMap
sm (AritmeticF (Sin Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
sin(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Cos Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
cos(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Tan Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
tan(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Asin Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
asin(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Acos Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
acos(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Atan Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
atan(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Sinh Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
sinh(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Cosh Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
cosh(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Tanh Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
tanh(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Asinh Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
asinh(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Acosh Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
acosh(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Atanh Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
atanh(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Exp Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
exp(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Sqrt Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Floating a => a -> a
sqrt(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Size Arg
arg)) =
(Value -> Value) -> Printable -> Printable
applyOpP (Int -> Value
IntValue(Int -> Value) -> (Value -> Int) -> Value -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length(String -> Int) -> (Value -> String) -> Value -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> String
forall a. Show a => a -> String
show)(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (ToString Arg
arg)) =
(Value -> Value) -> Printable -> Printable
applyOpP (String -> Value
StringValue(String -> Value) -> (Value -> String) -> Value -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> String
forall a. Show a => a -> String
show)(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Round Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall b. Integral b => Value -> b
forall a b. (RealFrac a, Integral b) => a -> b
round(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Truncate Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall b. Integral b => Value -> b
forall a b. (RealFrac a, Integral b) => a -> b
truncate(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Ceiling Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall b. Integral b => Value -> b
forall a b. (RealFrac a, Integral b) => a -> b
ceiling(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Floor Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall b. Integral b => Value -> b
forall a b. (RealFrac a, Integral b) => a -> b
floor(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (MinusS Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Num a => a -> a
negate(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Negate Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Num a => a -> a
negate(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Abs Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Num a => a -> a
abs(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Signum Arg
arg)) = (Value -> Value) -> Printable -> Printable
applyOpP Value -> Value
forall a. Num a => a -> a
signum(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Even Arg
arg)) =
(Value -> Value) -> Printable -> Printable
applyOpP (Bool -> Value
BoolValue(Bool -> Value) -> (Value -> Bool) -> Value -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Bool
forall a. Integral a => a -> Bool
even)(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (AritmeticF (Odd Arg
arg)) =
(Value -> Value) -> Printable -> Printable
applyOpP (Bool -> Value
BoolValue(Bool -> Value) -> (Value -> Bool) -> Value -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Bool
forall a. Integral a => a -> Bool
odd)(Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (LogicF (Not Arg
arg)) =
(Value -> Value) -> Printable -> Printable
applyOpP (Bool -> Value
BoolValue(Bool -> Value) -> (Value -> Bool) -> Value -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Bool
not(Bool -> Bool) -> (Value -> Bool) -> Value -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Bool
forall a. Boolable a => a -> Bool
getBool) (Printable -> Printable) -> Printable -> Printable
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg
evalFunction SymbolMap
sm (LogicF (And Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (\Value
x Value
y -> Bool -> Value
BoolValue(Bool -> Value) -> Bool -> Value
forall a b. (a -> b) -> a -> b
$ Value -> Bool
forall a. Boolable a => a -> Bool
getBool Value
x Bool -> Bool -> Bool
&& Value -> Bool
forall a. Boolable a => a -> Bool
getBool Value
y)
(SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (LogicF (Or Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (\Value
x Value
y -> Bool -> Value
BoolValue(Bool -> Value) -> Bool -> Value
forall a b. (a -> b) -> a -> b
$ Value -> Bool
forall a. Boolable a => a -> Bool
getBool Value
x Bool -> Bool -> Bool
|| Value -> Bool
forall a. Boolable a => a -> Bool
getBool Value
y)
(SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Plus Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP Value -> Value -> Value
forall a. Num a => a -> a -> a
(+) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Minus Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (-) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Multiply Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP Value -> Value -> Value
forall a. Num a => a -> a -> a
(*) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Divide Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP Value -> Value -> Value
forall a. Fractional a => a -> a -> a
(/) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Power Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP Value -> Value -> Value
forall a. Floating a => a -> a -> a
(**) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (NaturalPower Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP Value -> Value -> Value
forall a b. (Fractional a, Integral b) => a -> b -> a
(^^) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Div Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (Value -> Value -> Value
forall a. Integral a => a -> a -> a
div) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Quot Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (Value -> Value -> Value
forall a. Integral a => a -> a -> a
quot) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Rem Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (Value -> Value -> Value
forall a. Integral a => a -> a -> a
rem) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Mod Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (Value -> Value -> Value
forall a. Integral a => a -> a -> a
mod) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Gcd Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (Value -> Value -> Value
forall a. Integral a => a -> a -> a
gcd) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Lcm Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (Value -> Value -> Value
forall a. Integral a => a -> a -> a
lcm) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Append Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (\Value
x Value
y -> String -> Value
StringValue(String -> Value) -> String -> Value
forall a b. (a -> b) -> a -> b
$ Value -> String
forall a. Show a => a -> String
show Value
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ Value -> String
forall a. Show a => a -> String
show Value
y)
(SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Less Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (\Value
x Value
y -> Bool -> Value
BoolValue(Bool -> Value) -> Bool -> Value
forall a b. (a -> b) -> a -> b
$ Value
x Value -> Value -> Bool
forall a. Ord a => a -> a -> Bool
< Value
y) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (LessOrEqual Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (\Value
x Value
y -> Bool -> Value
BoolValue(Bool -> Value) -> Bool -> Value
forall a b. (a -> b) -> a -> b
$ Value
x Value -> Value -> Bool
forall a. Ord a => a -> a -> Bool
<= Value
y) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (More Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (\Value
x Value
y -> Bool -> Value
BoolValue(Bool -> Value) -> Bool -> Value
forall a b. (a -> b) -> a -> b
$ Value
x Value -> Value -> Bool
forall a. Ord a => a -> a -> Bool
> Value
y) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (MoreOrEqual Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (\Value
x Value
y -> Bool -> Value
BoolValue(Bool -> Value) -> Bool -> Value
forall a b. (a -> b) -> a -> b
$ Value
x Value -> Value -> Bool
forall a. Ord a => a -> a -> Bool
>= Value
y) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (NotEqual Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (\Value
x Value
y -> Bool -> Value
BoolValue(Bool -> Value) -> Bool -> Value
forall a b. (a -> b) -> a -> b
$ Value
x Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
/= Value
y) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (Equal Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (\Value
x Value
y -> Bool -> Value
BoolValue(Bool -> Value) -> Bool -> Value
forall a b. (a -> b) -> a -> b
$ Value
x Value -> Value -> Bool
forall a. Eq a => a -> a -> Bool
== Value
y) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
evalFunction SymbolMap
sm (AritmeticF (In Arg
arg1 Arg
arg2)) =
(Value -> Value -> Value) -> Printable -> Printable -> Printable
applyInOpP (\Value
x Value
y -> Bool -> Value
BoolValue(Bool -> Value) -> Bool -> Value
forall a b. (a -> b) -> a -> b
$ (Value -> String
forall a. Show a => a -> String
show Value
x) String -> String -> Bool
`is_in` (Value -> String
forall a. Show a => a -> String
show Value
y))
(SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg1) (SymbolMap -> Arg -> Printable
eval SymbolMap
sm Arg
arg2)
where
cq_in :: String -> String -> Bool
cq_in :: String -> String -> Bool
cq_in [] [] = Bool
True
cq_in String
_ [] = Bool
False
cq_in [] String
_ = Bool
True
cq_in (Char
a : String
rest_a) (Char
b : String
rest_b)
| Char
a Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
b = String -> String -> Bool
cq_in String
rest_a String
rest_b
| Bool
otherwise = Bool
False
is_in :: String -> String -> Bool
is_in :: String -> String -> Bool
is_in String
_ [] = Bool
False
is_in [] String
_ = Bool
False
is_in String
a String
b
| String -> String -> Bool
cq_in String
a String
b Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
== Bool
True = Bool
True
| Bool
otherwise =
let (Char
_ : String
rest_b) = String
b in
String -> String -> Bool
is_in String
a String
rest_b
evalFunction SymbolMap
sm (AggregateF AggregateF
_) =
String -> Printable
forall a. HasCallStack => String -> a
error(String -> Printable) -> String -> Printable
forall a b. (a -> b) -> a -> b
$ String
"Aggregate functions can't be evaluated before grouping. " String -> ShowS
forall a. [a] -> [a] -> [a]
++
String
"This usually happens, when you call aggregate function from condition."
evalAggregateFunctions :: SymbolMap -> Arg -> Arg
evalAggregateFunctions :: SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map (Value Value
val) =
Value -> Arg
Value Value
val
evalAggregateFunctions SymbolMap
symbol_map (Symbol String
val) =
String -> Arg
Symbol String
val
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Sin Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Sin(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Cos Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Cos(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Tan Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Tan(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Asin Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Asin(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Acos Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Acos(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Atan Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Atan(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Sinh Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Sinh(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Cosh Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Cosh(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Tanh Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Tanh(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Asinh Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Asinh(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Acosh Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Acosh(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Atanh Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Atanh(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Exp Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Exp(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Sqrt Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Sqrt(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Size Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Size(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (ToString Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
ToString(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Append Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Append
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Round Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Round(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Truncate Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Truncate(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Ceiling Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Ceiling(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Floor Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Floor(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (MinusS Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
MinusS(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Abs Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Abs(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Signum Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Signum(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Negate Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Negate(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Plus Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Plus
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Minus Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Minus
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Multiply Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Multiply
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Divide Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Divide
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Power Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Power
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Even Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Even(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Odd Arg
arg))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> AritmeticF
Odd(Arg -> AritmeticF) -> Arg -> AritmeticF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (NaturalPower Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
NaturalPower
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Div Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Div
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Quot Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Quot
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Rem Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Rem
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Mod Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Mod
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Gcd Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Gcd
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Lcm Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Lcm
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Less Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Less
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (LessOrEqual Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
LessOrEqual
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (More Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
More
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (MoreOrEqual Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
MoreOrEqual
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (Equal Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
Equal
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (NotEqual Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
NotEqual
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (LeftOuterJoin Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
LeftOuterJoin
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (AritmeticF (In Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (AritmeticF -> Function
AritmeticF (Arg -> Arg -> AritmeticF
In
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (LogicF (And Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (LogicF -> Function
LogicF (Arg -> Arg -> LogicF
And
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (LogicF (Or Arg
arg1 Arg
arg2))) =
Function -> Arg
Function (LogicF -> Function
LogicF (Arg -> Arg -> LogicF
Or
(SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg1) (SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg2)))
evalAggregateFunctions SymbolMap
symbol_map (Function (LogicF (Not Arg
arg))) =
Function -> Arg
Function (LogicF -> Function
LogicF (Arg -> LogicF
Not(Arg -> LogicF) -> Arg -> LogicF
forall a b. (a -> b) -> a -> b
$ SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map Arg
arg))
evalAggregateFunctions SymbolMap
symbol_map (Function (AggregateF (Cat [Arg]
args))) =
Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ Printable -> Value
doCat Printable
evaled
where
evaled :: Printable
evaled :: Printable
evaled = SymbolMap -> Arg -> Printable
eval SymbolMap
symbol_map ([Arg] -> Arg
catterate [Arg]
args)
doCat :: Printable -> Value
doCat :: Printable -> Value
doCat (ValueP Value
value) = Value
value
doCat (ColumnP (Column [String]
_ [Value]
vals)) = String -> Value
StringValue(String -> Value) -> String -> Value
forall a b. (a -> b) -> a -> b
$ [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ (Value -> String) -> [Value] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map Value -> String
forall a. Show a => a -> String
show [Value]
vals
evalAggregateFunctions SymbolMap
symbol_map (Function (AggregateF (Sum [Arg]
args))) =
Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ Printable -> Value
doSum Printable
evaled
where
evaled :: Printable
evaled :: Printable
evaled = SymbolMap -> Arg -> Printable
eval SymbolMap
symbol_map(Arg -> Printable) -> Arg -> Printable
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg -> Arg) -> [Arg] -> Arg
forall a. (a -> a -> a) -> [a] -> a
forall (t :: * -> *) a. Foldable t => (a -> a -> a) -> t a -> a
foldl1
(\Arg
x Arg
y -> Function -> Arg
Function(Function -> Arg) -> Function -> Arg
forall a b. (a -> b) -> a -> b
$ AritmeticF -> Function
AritmeticF(AritmeticF -> Function) -> AritmeticF -> Function
forall a b. (a -> b) -> a -> b
$ Arg -> Arg -> AritmeticF
Plus Arg
x Arg
y)([Arg] -> Arg) -> [Arg] -> Arg
forall a b. (a -> b) -> a -> b
$ [Arg]
args
doSum :: Printable -> Value
doSum :: Printable -> Value
doSum (ValueP Value
value) = String -> Value
forall a. HasCallStack => String -> a
error String
"You cannot sum constant."
doSum (ColumnP (Column [String]
_ [Value]
vals))
| [Value] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Value]
vals = Value
0
| Bool
otherwise = (Value -> Value -> Value) -> [Value] -> Value
forall a. (a -> a -> a) -> [a] -> a
forall (t :: * -> *) a. Foldable t => (a -> a -> a) -> t a -> a
foldl1 Value -> Value -> Value
forall a. Num a => a -> a -> a
(+) [Value]
vals
evalAggregateFunctions SymbolMap
symbol_map (Function (AggregateF (Count [Arg]
args)))
| [Printable] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Printable]
evaled = Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ Int -> Value
IntValue Int
0
| Bool
otherwise = Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ (Value -> Value -> Value) -> [Value] -> Value
forall a. (a -> a -> a) -> [a] -> a
forall (t :: * -> *) a. Foldable t => (a -> a -> a) -> t a -> a
foldl1 Value -> Value -> Value
forall a. Num a => a -> a -> a
(+)([Value] -> Value) -> [Value] -> Value
forall a b. (a -> b) -> a -> b
$ (Printable -> Value) -> [Printable] -> [Value]
forall a b. (a -> b) -> [a] -> [b]
map Printable -> Value
doCount [Printable]
evaled
where
evaled :: [Printable]
evaled :: [Printable]
evaled = (Arg -> Printable) -> [Arg] -> [Printable]
forall a b. (a -> b) -> [a] -> [b]
map (SymbolMap -> Arg -> Printable
eval SymbolMap
symbol_map) [Arg]
args
doCount :: Printable -> Value
doCount :: Printable -> Value
doCount (ValueP Value
value) = String -> Value
forall a. HasCallStack => String -> a
error String
"You cannot count constant"
doCount (ColumnP (Column [String]
_ [Value]
vals)) = Int -> Value
IntValue(Int -> Value) -> Int -> Value
forall a b. (a -> b) -> a -> b
$ [Value] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Value]
vals
evalAggregateFunctions SymbolMap
symbol_map (Function (AggregateF (Avg [Arg]
args))) =
Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ Printable -> Value
doAvg Printable
evaled
where
evaled :: Printable
evaled :: Printable
evaled = SymbolMap -> Arg -> Printable
eval SymbolMap
symbol_map(Arg -> Printable) -> Arg -> Printable
forall a b. (a -> b) -> a -> b
$
SymbolMap -> Arg -> Arg
evalAggregateFunctions SymbolMap
symbol_map(Arg -> Arg) -> Arg -> Arg
forall a b. (a -> b) -> a -> b
$ Function -> Arg
Function(Function -> Arg) -> Function -> Arg
forall a b. (a -> b) -> a -> b
$ AritmeticF -> Function
AritmeticF(AritmeticF -> Function) -> AritmeticF -> Function
forall a b. (a -> b) -> a -> b
$
Arg -> Arg -> AritmeticF
Divide (Function -> Arg
Function(Function -> Arg) -> Function -> Arg
forall a b. (a -> b) -> a -> b
$ AggregateF -> Function
AggregateF(AggregateF -> Function) -> AggregateF -> Function
forall a b. (a -> b) -> a -> b
$ [Arg] -> AggregateF
Sum([Arg] -> AggregateF) -> [Arg] -> AggregateF
forall a b. (a -> b) -> a -> b
$ [Arg]
args) (Function -> Arg
Function(Function -> Arg) -> Function -> Arg
forall a b. (a -> b) -> a -> b
$ AggregateF -> Function
AggregateF(AggregateF -> Function) -> AggregateF -> Function
forall a b. (a -> b) -> a -> b
$ [Arg] -> AggregateF
Count([Arg] -> AggregateF) -> [Arg] -> AggregateF
forall a b. (a -> b) -> a -> b
$ [Arg]
args)
doAvg :: Printable -> Value
doAvg :: Printable -> Value
doAvg (ValueP Value
value) = Value
value
evalAggregateFunctions SymbolMap
symbol_map (Function (AggregateF (Min [Arg]
args))) =
Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ [Value] -> Value
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum([Value] -> Value) -> [Value] -> Value
forall a b. (a -> b) -> a -> b
$ (Printable -> Value) -> [Printable] -> [Value]
forall a b. (a -> b) -> [a] -> [b]
map Printable -> Value
doMin [Printable]
evaled
where
evaled :: [Printable]
evaled :: [Printable]
evaled = (Arg -> Printable) -> [Arg] -> [Printable]
forall a b. (a -> b) -> [a] -> [b]
map (SymbolMap -> Arg -> Printable
eval SymbolMap
symbol_map) [Arg]
args
doMin :: Printable -> Value
doMin :: Printable -> Value
doMin (ValueP Value
value) = Value
value
doMin (ColumnP (Column [String]
_ [Value]
vals)) = [Value] -> Value
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum [Value]
vals
evalAggregateFunctions SymbolMap
symbol_map (Function (AggregateF (Max [Arg]
args))) =
Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ [Value] -> Value
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum([Value] -> Value) -> [Value] -> Value
forall a b. (a -> b) -> a -> b
$ (Printable -> Value) -> [Printable] -> [Value]
forall a b. (a -> b) -> [a] -> [b]
map Printable -> Value
doMax [Printable]
evaled
where
evaled :: [Printable]
evaled :: [Printable]
evaled = (Arg -> Printable) -> [Arg] -> [Printable]
forall a b. (a -> b) -> [a] -> [b]
map (SymbolMap -> Arg -> Printable
eval SymbolMap
symbol_map) [Arg]
args
doMax :: Printable -> Value
doMax :: Printable -> Value
doMax (ValueP Value
value) = Value
value
doMax (ColumnP (Column [String]
_ [Value]
vals)) = [Value] -> Value
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum [Value]
vals
containsAggregateF :: Arg -> Bool
containsAggregateF :: Arg -> Bool
containsAggregateF (Function (AritmeticF (Sin Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Cos Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Tan Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Asin Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Acos Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Atan Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Sinh Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Cosh Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Tanh Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Asinh Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Acosh Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Atanh Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Exp Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Sqrt Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Size Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (ToString Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Append Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Round Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Truncate Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Ceiling Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Floor Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (MinusS Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Abs Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Signum Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Negate Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Plus Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Minus Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Multiply Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Divide Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Power Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Even Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (Odd Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AritmeticF (NaturalPower Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Div Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Quot Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Rem Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Mod Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Gcd Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Lcm Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Less Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (LessOrEqual Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (More Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (MoreOrEqual Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (Equal Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (NotEqual Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (LeftOuterJoin Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (AritmeticF (In Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (LogicF (And Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (LogicF (Or Arg
arg1 Arg
arg2))) = Arg -> Bool
containsAggregateF Arg
arg1 Bool -> Bool -> Bool
|| Arg -> Bool
containsAggregateF Arg
arg2
containsAggregateF (Function (LogicF (Not Arg
arg))) = Arg -> Bool
containsAggregateF Arg
arg
containsAggregateF (Function (AggregateF AggregateF
_)) = Bool
True
containsAggregateF Arg
_ = Bool
False