module Lsql.Csv.Lang.Selector (selectorP, arithmeticExprP) where
import Text.Parsec
import Text.Parsec.Prim
import Text.Parsec.Combinator
import Text.Parsec.Text
import Text.Parsec.Char
import Data.List
import Lsql.Csv.Utils.BracketExpansion
import Lsql.Csv.Core.Functions
import Lsql.Csv.Core.Tables
import System.FilePath.Glob
aggregateFGen :: ([Arg] -> AggregateF) -> [Arg] -> Arg
aggregateFGen :: ([Arg] -> AggregateF) -> [Arg] -> Arg
aggregateFGen [Arg] -> AggregateF
fun [Arg]
arg = 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
fun [Arg]
arg
aggregateFP :: ([Arg] -> Arg) -> String -> [String] -> Parser Arg
aggregateFP :: ([Arg] -> Arg) -> String -> [String] -> Parser Arg
aggregateFP [Arg] -> Arg
constructor String
name [String]
symbol_list = do
String -> ParsecT Text () Identity String
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string String
name
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'('
[Arg]
ret <- [String] -> Parser [Arg]
selectorP [String]
symbol_list
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
')'
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ [Arg] -> Arg
constructor([Arg] -> Arg) -> [Arg] -> Arg
forall a b. (a -> b) -> a -> b
$ [Arg]
ret
catP :: [String] -> Parser Arg
catP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ ([Arg] -> Arg) -> String -> [String] -> Parser Arg
aggregateFP (([Arg] -> AggregateF) -> [Arg] -> Arg
aggregateFGen [Arg] -> AggregateF
Cat) String
"cat" [String]
symbol_list
sumP :: [String] -> Parser Arg
sumP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ ([Arg] -> Arg) -> String -> [String] -> Parser Arg
aggregateFP (([Arg] -> AggregateF) -> [Arg] -> Arg
aggregateFGen [Arg] -> AggregateF
Sum) String
"sum" [String]
symbol_list
avgP :: [String] -> Parser Arg
avgP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ ([Arg] -> Arg) -> String -> [String] -> Parser Arg
aggregateFP (([Arg] -> AggregateF) -> [Arg] -> Arg
aggregateFGen [Arg] -> AggregateF
Avg) String
"avg" [String]
symbol_list
countP :: [String] -> Parser Arg
countP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ ([Arg] -> Arg) -> String -> [String] -> Parser Arg
aggregateFP (([Arg] -> AggregateF) -> [Arg] -> Arg
aggregateFGen [Arg] -> AggregateF
Count) String
"count" [String]
symbol_list
minP :: [String] -> Parser Arg
minP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ ([Arg] -> Arg) -> String -> [String] -> Parser Arg
aggregateFP (([Arg] -> AggregateF) -> [Arg] -> Arg
aggregateFGen [Arg] -> AggregateF
Min) String
"min" [String]
symbol_list
maxP :: [String] -> Parser Arg
maxP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ ([Arg] -> Arg) -> String -> [String] -> Parser Arg
aggregateFP (([Arg] -> AggregateF) -> [Arg] -> Arg
aggregateFGen [Arg] -> AggregateF
Max) String
"max" [String]
symbol_list
aggregateFunctionsP :: [String] -> Parser Arg
aggregateFunctionsP :: [String] -> Parser Arg
aggregateFunctionsP [String]
symbol_list =
([String] -> Parser Arg
catP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
sumP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Parser Arg
avgP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
countP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Parser Arg
minP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
maxP [String]
symbol_list)
oneArgFP :: (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP :: (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP Arg -> Arg
constructor String
name [String]
symbol_list = do
String -> ParsecT Text () Identity String
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string String
name
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'('
Arg
ret <- [String] -> Parser Arg
arithmeticExprP [String]
symbol_list
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
')'
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Arg -> Arg
constructor(Arg -> Arg) -> Arg -> Arg
forall a b. (a -> b) -> a -> b
$ Arg
ret
arithmeticFGen :: (Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen :: (Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
fun Arg
arg = 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 -> AritmeticF
fun Arg
arg
sinP :: [String] -> Parser Arg
sinP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Sin) String
"sin" [String]
symbol_list
cosP :: [String] -> Parser Arg
cosP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Cos) String
"cos" [String]
symbol_list
tanP :: [String] -> Parser Arg
tanP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Tan) String
"tan" [String]
symbol_list
asinP :: [String] -> Parser Arg
asinP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Asin) String
"asin" [String]
symbol_list
acosP :: [String] -> Parser Arg
acosP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Acos) String
"acos" [String]
symbol_list
atanP :: [String] -> Parser Arg
atanP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Atan) String
"atan" [String]
symbol_list
sinhP :: [String] -> Parser Arg
sinhP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Sinh) String
"sinh" [String]
symbol_list
coshP :: [String] -> Parser Arg
coshP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Cosh) String
"cosh" [String]
symbol_list
tanhP :: [String] -> Parser Arg
tanhP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Tanh) String
"tanh" [String]
symbol_list
asinhP :: [String] -> Parser Arg
asinhP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Asinh) String
"asinh" [String]
symbol_list
acoshP :: [String] -> Parser Arg
acoshP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Acosh) String
"acosh" [String]
symbol_list
atanhP :: [String] -> Parser Arg
atanhP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Atanh) String
"atanh" [String]
symbol_list
expP :: [String] -> Parser Arg
expP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Exp) String
"exp" [String]
symbol_list
sqrtP :: [String] -> Parser Arg
sqrtP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Sqrt) String
"sqrt" [String]
symbol_list
sizeP :: [String] -> Parser Arg
sizeP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Size) String
"size" [String]
symbol_list
toStringP :: [String] -> Parser Arg
toStringP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
ToString) String
"to_string" [String]
symbol_list
negateP :: [String] -> Parser Arg
negateP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Negate) String
"negate" [String]
symbol_list
absP :: [String] -> Parser Arg
absP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Abs) String
"abs" [String]
symbol_list
signumP :: [String] -> Parser Arg
signumP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Signum) String
"signum" [String]
symbol_list
roundP :: [String] -> Parser Arg
roundP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Round) String
"round" [String]
symbol_list
truncateP :: [String] -> Parser Arg
truncateP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Truncate) String
"truncate" [String]
symbol_list
ceilingP :: [String] -> Parser Arg
ceilingP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Ceiling) String
"ceiling" [String]
symbol_list
floorP :: [String] -> Parser Arg
floorP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Floor) String
"floor" [String]
symbol_list
evenP :: [String] -> Parser Arg
evenP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Even) String
"even" [String]
symbol_list
oddP :: [String] -> Parser Arg
oddP [String]
symbol_list = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ (Arg -> Arg) -> String -> [String] -> Parser Arg
oneArgFP ((Arg -> AritmeticF) -> Arg -> Arg
arithmeticFGen Arg -> AritmeticF
Odd) String
"odd" [String]
symbol_list
oneArgFunctionsP :: [String] -> Parser Arg
oneArgFunctionsP :: [String] -> Parser Arg
oneArgFunctionsP [String]
symbol_list =
([String] -> Parser Arg
sinP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
cosP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
tanP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Parser Arg
asinP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
acosP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
atanP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Parser Arg
sinhP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
coshP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
tanhP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Parser Arg
asinhP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
acoshP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
atanhP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Parser Arg
expP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
sqrtP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Parser Arg
sizeP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
toStringP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Parser Arg
negateP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
absP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
signumP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Parser Arg
roundP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
truncateP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
ceilingP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Parser Arg
floorP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Parser Arg
evenP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Parser Arg
oddP [String]
symbol_list)
notP :: [String] -> Parser Arg
notP :: [String] -> Parser Arg
notP [String]
symbol_list = do
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'!'
ParsecT Text () Identity Char -> ParsecT Text () Identity ()
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m ()
skipMany ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
space
Arg
ret <- [String] -> Parser Arg
arithmeticExprP [String]
symbol_list
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Function -> Arg
Function(Function -> Arg) -> Function -> Arg
forall a b. (a -> b) -> a -> b
$ LogicF -> Function
LogicF(LogicF -> Function) -> LogicF -> Function
forall a b. (a -> b) -> a -> b
$ Arg -> LogicF
Not Arg
ret
minusSP :: [String] -> Parser Arg
minusSP :: [String] -> Parser Arg
minusSP [String]
symbol_list = do
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'-'
ParsecT Text () Identity Char -> ParsecT Text () Identity ()
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m ()
skipMany ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
space
Arg
ret <- [String] -> Parser Arg
arithmeticExprP [String]
symbol_list
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser 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 -> AritmeticF
MinusS Arg
ret
arithmeticF2Gen :: (Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen :: (Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
fun Arg
arg1 Arg
arg2 = 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
fun Arg
arg1 Arg
arg2
logicF2Gen :: (Arg -> Arg -> LogicF) -> Arg -> Arg -> Arg
logicF2Gen :: (Arg -> Arg -> LogicF) -> Arg -> Arg -> Arg
logicF2Gen Arg -> Arg -> LogicF
fun Arg
arg1 Arg
arg2 = Function -> Arg
Function(Function -> Arg) -> Function -> Arg
forall a b. (a -> b) -> a -> b
$ LogicF -> Function
LogicF(LogicF -> Function) -> LogicF -> Function
forall a b. (a -> b) -> a -> b
$ Arg -> Arg -> LogicF
fun Arg
arg1 Arg
arg2
twoArgInFP :: Int -> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP :: Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
level Arg -> Arg -> Arg
constructor String
op_name [String]
symbol_list Arg
arg1 = do
ParsecT Text () Identity Char -> ParsecT Text () Identity ()
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m ()
skipMany ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
space
String -> ParsecT Text () Identity String
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string String
op_name
Arg
arg2 <- Int -> [String] -> Parser Arg
arithmeticExprGenP Int
level [String]
symbol_list
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Arg -> Arg -> Arg
constructor Arg
arg1 Arg
arg2
inP :: [String] -> Arg -> Parser Arg
inP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
1 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
In) String
"in" [String]
symbol_list Arg
arg
powerP :: [String] -> Arg -> Parser Arg
powerP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
1 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Power) String
"**" [String]
symbol_list Arg
arg
naturalPowerP :: [String] -> Arg -> Parser Arg
naturalPowerP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
1 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
NaturalPower) String
"^" [String]
symbol_list Arg
arg
multiplyP :: [String] -> Arg -> Parser Arg
multiplyP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
2 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Multiply) String
"*" [String]
symbol_list Arg
arg
divideP :: [String] -> Arg -> Parser Arg
divideP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
2 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Divide) String
"/" [String]
symbol_list Arg
arg
divP :: [String] -> Arg -> Parser Arg
divP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
2 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Div) String
"div" [String]
symbol_list Arg
arg
quotP :: [String] -> Arg -> Parser Arg
quotP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
2 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Quot) String
"quot" [String]
symbol_list Arg
arg
remP :: [String] -> Arg -> Parser Arg
remP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
2 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Rem) String
"rem" [String]
symbol_list Arg
arg
modP :: [String] -> Arg -> Parser Arg
modP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
2 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Mod) String
"mod" [String]
symbol_list Arg
arg
gcdP :: [String] -> Arg -> Parser Arg
gcdP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
2 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Gcd) String
"gcd" [String]
symbol_list Arg
arg
lcmP :: [String] -> Arg -> Parser Arg
lcmP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
2 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Lcm) String
"lcm" [String]
symbol_list Arg
arg
appendP :: [String] -> Arg -> Parser Arg
appendP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
3 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Append) String
"++" [String]
symbol_list Arg
arg
plusP :: [String] -> Arg -> Parser Arg
plusP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
3 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Plus) String
"+" [String]
symbol_list Arg
arg
minusP :: [String] -> Arg -> Parser Arg
minusP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
3 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Minus) String
"-" [String]
symbol_list Arg
arg
lessOrEqualP :: [String] -> Arg -> Parser Arg
lessOrEqualP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
4 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
LessOrEqual) String
"<=" [String]
symbol_list Arg
arg
moreOrEqualP :: [String] -> Arg -> Parser Arg
moreOrEqualP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
4 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
MoreOrEqual) String
">=" [String]
symbol_list Arg
arg
lessP :: [String] -> Arg -> Parser Arg
lessP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
4 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Less) String
"<" [String]
symbol_list Arg
arg
moreP :: [String] -> Arg -> Parser Arg
moreP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
4 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
More) String
">" [String]
symbol_list Arg
arg
notEqualP :: [String] -> Arg -> Parser Arg
notEqualP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
4 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
NotEqual) String
"!=" [String]
symbol_list Arg
arg
equalP :: [String] -> Arg -> Parser Arg
equalP [String]
symbol_list Arg
arg =
Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
4 ((Arg -> Arg -> AritmeticF) -> Arg -> Arg -> Arg
arithmeticF2Gen Arg -> Arg -> AritmeticF
Equal) String
"==" [String]
symbol_list Arg
arg
orP :: [String] -> Arg -> Parser Arg
orP [String]
symbol_list Arg
arg = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
5 ((Arg -> Arg -> LogicF) -> Arg -> Arg -> Arg
logicF2Gen Arg -> Arg -> LogicF
Or) String
"||" [String]
symbol_list Arg
arg
andP :: [String] -> Arg -> Parser Arg
andP [String]
symbol_list Arg
arg = Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Int
-> (Arg -> Arg -> Arg) -> String -> [String] -> Arg -> Parser Arg
twoArgInFP Int
5 ((Arg -> Arg -> LogicF) -> Arg -> Arg -> Arg
logicF2Gen Arg -> Arg -> LogicF
And) String
"&&" [String]
symbol_list Arg
arg
twoArgInFunctions1P :: [String] -> Arg -> Parser Arg
twoArgInFunctions1P :: [String] -> Arg -> Parser Arg
twoArgInFunctions1P [String]
symbol_list Arg
arg =
([String] -> Arg -> Parser Arg
inP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Arg -> Parser Arg
powerP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Arg -> Parser Arg
naturalPowerP [String]
symbol_list Arg
arg)
twoArgInFunctions2P :: [String] -> Arg -> Parser Arg
twoArgInFunctions2P :: [String] -> Arg -> Parser Arg
twoArgInFunctions2P [String]
symbol_list Arg
arg =
([String] -> Arg -> Parser Arg
multiplyP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Arg -> Parser Arg
divideP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Arg -> Parser Arg
divP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Arg -> Parser Arg
quotP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Arg -> Parser Arg
remP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Arg -> Parser Arg
modP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Arg -> Parser Arg
gcdP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Arg -> Parser Arg
lcmP [String]
symbol_list Arg
arg)
twoArgInFunctions3P :: [String] -> Arg -> Parser Arg
twoArgInFunctions3P :: [String] -> Arg -> Parser Arg
twoArgInFunctions3P [String]
symbol_list Arg
arg =
([String] -> Arg -> Parser Arg
appendP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Arg -> Parser Arg
plusP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Arg -> Parser Arg
minusP [String]
symbol_list Arg
arg)
twoArgInFunctions4P :: [String] -> Arg -> Parser Arg
twoArgInFunctions4P :: [String] -> Arg -> Parser Arg
twoArgInFunctions4P [String]
symbol_list Arg
arg =
([String] -> Arg -> Parser Arg
lessOrEqualP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Arg -> Parser Arg
moreOrEqualP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Arg -> Parser Arg
lessP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Arg -> Parser Arg
moreP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
([String] -> Arg -> Parser Arg
notEqualP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Arg -> Parser Arg
equalP [String]
symbol_list Arg
arg)
twoArgInFunctions5P :: [String] -> Arg -> Parser Arg
twoArgInFunctions5P :: [String] -> Arg -> Parser Arg
twoArgInFunctions5P [String]
symbol_list Arg
arg =
([String] -> Arg -> Parser Arg
orP [String]
symbol_list Arg
arg) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ([String] -> Arg -> Parser Arg
andP [String]
symbol_list Arg
arg)
bracketAritmeticExprP :: [String] -> Parser Arg
bracketAritmeticExprP :: [String] -> Parser Arg
bracketAritmeticExprP [String]
symbol_list = do
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'('
Arg
ret <- [String] -> Parser Arg
arithmeticExprP [String]
symbol_list
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
')'
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Arg
ret
dolarAritmeticExprP :: [String] -> Parser Arg
dolarAritmeticExprP :: [String] -> Parser Arg
dolarAritmeticExprP [String]
symbol_list = do
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'$'
Arg
ret <- [String] -> Parser Arg
bracketAritmeticExprP [String]
symbol_list
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return Arg
ret
nonRecAritmeticExpr :: [String] -> Parser Arg
nonRecAritmeticExpr :: [String] -> Parser Arg
nonRecAritmeticExpr [String]
symbol_list = do
ParsecT Text () Identity Char -> ParsecT Text () Identity ()
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m ()
skipMany ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
space
Arg
ret <-([String] -> Parser Arg
bracketAritmeticExprP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
(Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ [String] -> Parser Arg
dolarAritmeticExprP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
(Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ [String] -> Parser Arg
oneArgFunctionsP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
(Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ [String] -> Parser Arg
aggregateFunctionsP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
(Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ [String] -> Parser Arg
notP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
(Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ [String] -> Parser Arg
minusSP [String]
symbol_list) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
Parser Arg
oneAtomP
ParsecT Text () Identity Char -> ParsecT Text () Identity ()
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m ()
skipMany ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
space
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return Arg
ret
arithmeticExprNP :: [[String] -> Arg -> Parser Arg] -> [String] -> Parser Arg
arithmeticExprNP :: [[String] -> Arg -> Parser Arg] -> [String] -> Parser Arg
arithmeticExprNP [] [String]
symbol_list = [String] -> Parser Arg
nonRecAritmeticExpr [String]
symbol_list
arithmeticExprNP ([String] -> Arg -> Parser Arg
funGen : [[String] -> Arg -> Parser Arg]
rest) [String]
symbol_list = do
Arg
pre <- [[String] -> Arg -> Parser Arg] -> [String] -> Parser Arg
arithmeticExprNP [[String] -> Arg -> Parser Arg]
rest [String]
symbol_list
Arg
ret <- Arg -> Parser Arg
recP Arg
pre
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Arg
ret
where
recP :: Arg -> Parser Arg
recP :: Arg -> Parser Arg
recP Arg
accu = do
Maybe Arg
next <- Parser Arg -> ParsecT Text () Identity (Maybe Arg)
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m (Maybe a)
optionMaybe (Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ [String] -> Arg -> Parser Arg
funGen [String]
symbol_list Arg
accu)
case Maybe Arg
next of
Just Arg
jnext -> do
Arg
rec_ret <- Arg -> Parser Arg
recP Arg
jnext
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Arg
rec_ret
Maybe Arg
Nothing -> Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return Arg
accu
arithmeticExprGenFP :: [[String] -> Arg -> Parser Arg]
arithmeticExprGenFP = [[String] -> Arg -> Parser Arg
twoArgInFunctions5P, [String] -> Arg -> Parser Arg
twoArgInFunctions4P,
[String] -> Arg -> Parser Arg
twoArgInFunctions3P, [String] -> Arg -> Parser Arg
twoArgInFunctions2P, [String] -> Arg -> Parser Arg
twoArgInFunctions1P]
arithmeticExprGenP :: Int -> [String] -> Parser Arg
arithmeticExprGenP :: Int -> [String] -> Parser Arg
arithmeticExprGenP Int
n [String]
symbol_list =
[[String] -> Arg -> Parser Arg] -> [String] -> Parser Arg
arithmeticExprNP (Int
-> [[String] -> Arg -> Parser Arg]
-> [[String] -> Arg -> Parser Arg]
forall a. Int -> [a] -> [a]
drop ([[String] -> Arg -> Parser Arg] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [[String] -> Arg -> Parser Arg]
arithmeticExprGenFP Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
n) [[String] -> Arg -> Parser Arg]
arithmeticExprGenFP)
[String]
symbol_list
arithmeticExprP :: [String] -> Parser Arg
arithmeticExprP :: [String] -> Parser Arg
arithmeticExprP [String]
symbol_list = Int -> [String] -> Parser Arg
arithmeticExprGenP Int
5 [String]
symbol_list
globMatching :: [String] -> String -> [String]
globMatching :: [String] -> String -> [String]
globMatching [String]
symbols String
expr =
let p :: Pattern
p = String -> Pattern
compile String
expr in
let ret :: [String]
ret = (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (Pattern -> String -> Bool
match Pattern
p) [String]
symbols in
if [String] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
ret then
[String
expr]
else
[String]
ret
exoticAtomP :: Parser Arg
exoticAtomP :: Parser Arg
exoticAtomP = do
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'`'
String
ret <- ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many1(ParsecT Text () Identity Char -> ParsecT Text () Identity String)
-> ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall a b. (a -> b) -> a -> b
$ String -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
noneOf String
"`"
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'`'
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ String -> Arg
Symbol String
ret
nonAtomChars :: String
nonAtomChars = String
"\n `\"'$()<>="
oneRegularAtomP :: Parser Arg
oneRegularAtomP :: Parser Arg
oneRegularAtomP = do
String
atom <- ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many1(ParsecT Text () Identity Char -> ParsecT Text () Identity String)
-> ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall a b. (a -> b) -> a -> b
$ String -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
noneOf(String -> ParsecT Text () Identity Char)
-> String -> ParsecT Text () Identity Char
forall a b. (a -> b) -> a -> b
$ String
nonAtomChars String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"[]*,{}^+-!/|"
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ String -> Arg
atomParse String
atom
atomParse :: String -> Arg
atomParse :: String -> Arg
atomParse String
"e" = Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ Double -> Value
DoubleValue(Double -> Value) -> Double -> Value
forall a b. (a -> b) -> a -> b
$ Double -> Double
forall a. Floating a => a -> a
exp Double
1
atomParse String
"pi" = Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ Double -> Value
DoubleValue Double
forall a. Floating a => a
pi
atomParse String
"true" = Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ Bool -> Value
BoolValue(Bool -> Value) -> Bool -> Value
forall a b. (a -> b) -> a -> b
$ Bool
True
atomParse String
"false" = Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ Bool -> Value
BoolValue(Bool -> Value) -> Bool -> Value
forall a b. (a -> b) -> a -> b
$ Bool
False
atomParse String
x = String -> Arg
Symbol String
x
constantP :: Parser Arg
constantP :: Parser Arg
constantP = Parser Arg
stringConstantP Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
(Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Parser Arg
doubleConstantP) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> (Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Parser Arg
intConstantP) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
(Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Parser Arg
minusDoubleConstantP) Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> (Parser Arg -> Parser Arg
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser Arg -> Parser Arg) -> Parser Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Parser Arg
minusIntConstantP)
oneAtomP :: Parser Arg
oneAtomP :: Parser Arg
oneAtomP = do
Arg
ret <- Parser Arg
exoticAtomP Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> Parser Arg
constantP Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> Parser Arg
oneRegularAtomP
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return Arg
ret
selectAtomP :: [String] -> Parser [Arg]
selectAtomP :: [String] -> Parser [Arg]
selectAtomP [String]
symbol_list = do
String
expr <- ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many1(ParsecT Text () Identity Char -> ParsecT Text () Identity String)
-> ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall a b. (a -> b) -> a -> b
$ String -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
noneOf String
nonAtomChars
let symbols :: [String]
symbols = [[String]] -> [String]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat([[String]] -> [String]) -> [[String]] -> [String]
forall a b. (a -> b) -> a -> b
$ (String -> [String]) -> [String] -> [[String]]
forall a b. (a -> b) -> [a] -> [b]
map ([String] -> String -> [String]
globMatching [String]
symbol_list)([String] -> [[String]]) -> [String] -> [[String]]
forall a b. (a -> b) -> a -> b
$ String -> [String]
bracketExpand String
expr
[Arg] -> Parser [Arg]
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return([Arg] -> Parser [Arg]) -> [Arg] -> Parser [Arg]
forall a b. (a -> b) -> a -> b
$ (String -> Arg) -> [String] -> [Arg]
forall a b. (a -> b) -> [a] -> [b]
map String -> Arg
atomParse [String]
symbols
minusIntConstantP :: Parser Arg
minusIntConstantP :: Parser Arg
minusIntConstantP = do
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'-'
String
ret <- ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many1(ParsecT Text () Identity Char -> ParsecT Text () Identity String)
-> ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall a b. (a -> b) -> a -> b
$ ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ Int -> Value
IntValue(Int -> Value) -> Int -> Value
forall a b. (a -> b) -> a -> b
$ Int -> Int
forall a. Num a => a -> a
negate(Int -> Int) -> Int -> Int
forall a b. (a -> b) -> a -> b
$ String -> Int
forall a. Read a => String -> a
read String
ret
intConstantP :: Parser Arg
intConstantP :: Parser Arg
intConstantP = do
String
ret <- ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many1(ParsecT Text () Identity Char -> ParsecT Text () Identity String)
-> ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall a b. (a -> b) -> a -> b
$ ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ Int -> Value
IntValue(Int -> Value) -> Int -> Value
forall a b. (a -> b) -> a -> b
$ String -> Int
forall a. Read a => String -> a
read String
ret
minusDoubleConstantP :: Parser Arg
minusDoubleConstantP :: Parser Arg
minusDoubleConstantP = do
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'-'
String
ret1 <- ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many(ParsecT Text () Identity Char -> ParsecT Text () Identity String)
-> ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall a b. (a -> b) -> a -> b
$ ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
String
ret2 <- String -> ParsecT Text () Identity String
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string String
"."
String
ret3 <- ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many(ParsecT Text () Identity Char -> ParsecT Text () Identity String)
-> ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall a b. (a -> b) -> a -> b
$ ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ Double -> Value
DoubleValue(Double -> Value) -> Double -> Value
forall a b. (a -> b) -> a -> b
$ Double -> Double
forall a. Num a => a -> a
negate(Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ String -> Double
forall a. Read a => String -> a
read(String -> Double) -> String -> Double
forall a b. (a -> b) -> a -> b
$ String
ret1 String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
ret2 String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
ret3
doubleConstantP :: Parser Arg
doubleConstantP :: Parser Arg
doubleConstantP = do
String
ret1 <- ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many(ParsecT Text () Identity Char -> ParsecT Text () Identity String)
-> ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall a b. (a -> b) -> a -> b
$ ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
String
ret2 <- String -> ParsecT Text () Identity String
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string String
"."
String
ret3 <- ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many(ParsecT Text () Identity Char -> ParsecT Text () Identity String)
-> ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall a b. (a -> b) -> a -> b
$ ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ Double -> Value
DoubleValue(Double -> Value) -> Double -> Value
forall a b. (a -> b) -> a -> b
$ String -> Double
forall a. Read a => String -> a
read(String -> Double) -> String -> Double
forall a b. (a -> b) -> a -> b
$ String
ret1 String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
ret2 String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
ret3
stringConstantP :: Parser Arg
stringConstantP :: Parser Arg
stringConstantP = do
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'"'
String
ret <- ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many(ParsecT Text () Identity Char -> ParsecT Text () Identity String)
-> ParsecT Text () Identity Char -> ParsecT Text () Identity String
forall a b. (a -> b) -> a -> b
$ String -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
noneOf String
"\""
Char -> ParsecT Text () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'"'
Arg -> Parser Arg
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return(Arg -> Parser Arg) -> Arg -> Parser Arg
forall a b. (a -> b) -> a -> b
$ Value -> Arg
Value(Value -> Arg) -> Value -> Arg
forall a b. (a -> b) -> a -> b
$ String -> Value
StringValue String
ret
atomP :: [String] -> Parser [Arg]
atomP :: [String] -> Parser [Arg]
atomP [String]
symbol_list = do
ParsecT Text () Identity Char -> ParsecT Text () Identity ()
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m ()
skipMany ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
space
[Arg]
ret <- (Parser [Arg] -> Parser [Arg]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parser [Arg]
neutronP) Parser [Arg] -> Parser [Arg] -> Parser [Arg]
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> Parser [Arg]
protonP
[Arg] -> Parser [Arg]
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return [Arg]
ret
where
nucleonP :: Parser [Arg]
nucleonP :: Parser [Arg]
nucleonP = do
Maybe [Arg]
nucM <- Parser [Arg] -> ParsecT Text () Identity (Maybe [Arg])
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m (Maybe a)
optionMaybe(Parser [Arg] -> ParsecT Text () Identity (Maybe [Arg]))
-> Parser [Arg] -> ParsecT Text () Identity (Maybe [Arg])
forall a b. (a -> b) -> a -> b
$ (Parser [Arg] -> Parser [Arg]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parser [Arg]
neutronP) Parser [Arg] -> Parser [Arg] -> Parser [Arg]
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> (Parser [Arg] -> Parser [Arg]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parser [Arg]
protonP)
[Arg] -> Parser [Arg]
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return([Arg] -> Parser [Arg]) -> [Arg] -> Parser [Arg]
forall a b. (a -> b) -> a -> b
$ case Maybe [Arg]
nucM of
Just [Arg]
args -> [Arg]
args
Maybe [Arg]
Nothing -> []
protonP :: Parser [Arg]
protonP :: Parser [Arg]
protonP = do
[Arg]
selected <- [String] -> Parser [Arg]
selectAtomP [String]
symbol_list
[Arg]
next <- Parser [Arg]
nucleonP
[Arg] -> Parser [Arg]
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return([Arg] -> Parser [Arg]) -> [Arg] -> Parser [Arg]
forall a b. (a -> b) -> a -> b
$ case [Arg]
next of
[] -> [Arg]
selected
[Arg]
otherwise ->
[Arg
in_sel Arg -> Arg -> Arg
`appendArg` Arg
suffix |
Arg
in_sel <- [Arg]
selected, Arg
suffix <- [Arg]
next]
neutronP :: Parser [Arg]
neutronP :: Parser [Arg]
neutronP = do
Arg
selected <- Parser Arg
constantP Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> Parser Arg
exoticAtomP Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
[String] -> Parser Arg
dolarAritmeticExprP [String]
symbol_list Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
[String] -> Parser Arg
oneArgFunctionsP [String]
symbol_list Parser Arg -> Parser Arg -> Parser Arg
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|>
[String] -> Parser Arg
aggregateFunctionsP [String]
symbol_list
[Arg]
next <- Parser [Arg]
nucleonP
[Arg] -> Parser [Arg]
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return([Arg] -> Parser [Arg]) -> [Arg] -> Parser [Arg]
forall a b. (a -> b) -> a -> b
$ case [Arg]
next of
[] -> [Arg
selected]
[Arg]
otherwise -> do
[Arg
selected Arg -> Arg -> Arg
`appendArg` Arg
suffix | Arg
suffix <- [Arg]
next]
selectorP :: [String] -> Parser [Arg]
selectorP :: [String] -> Parser [Arg]
selectorP [String]
symbol_list = do
ParsecT Text () Identity Char -> ParsecT Text () Identity ()
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m ()
skipMany ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
space
[[Arg]]
ret <- Parser [Arg] -> ParsecT Text () Identity [[Arg]]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many1(Parser [Arg] -> ParsecT Text () Identity [[Arg]])
-> Parser [Arg] -> ParsecT Text () Identity [[Arg]]
forall a b. (a -> b) -> a -> b
$ Parser [Arg] -> Parser [Arg]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try(Parser [Arg] -> Parser [Arg]) -> Parser [Arg] -> Parser [Arg]
forall a b. (a -> b) -> a -> b
$ [String] -> Parser [Arg]
atomP [String]
symbol_list
ParsecT Text () Identity Char -> ParsecT Text () Identity ()
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m ()
skipMany ParsecT Text () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
space
[Arg] -> Parser [Arg]
forall a. a -> ParsecT Text () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return([Arg] -> Parser [Arg]) -> [Arg] -> Parser [Arg]
forall a b. (a -> b) -> a -> b
$ [[Arg]] -> [Arg]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Arg]]
ret