--n.b. these definitions do not enforce type checking! The use of any function or operator will be associated with a FuncCall.
--Therefore, it is possible to have ASTs with ridiculous things where e.g. a XX product is applied to and int and a String, or a function call has an Int as a function!
--These issues will be checked via the type checker after the AST has been built.
dataExpr=FuncCall{func::Expr,inputSets::[Expr],args::[Expr]}-- args: function to call, input sets, extra argument. Applicable for all kinds of functions: the set functions e.g. filter, map or simple functions or even the operators e.g. ==, /= ! We don't define separate expr for each operator
|FuncDef{name::SymbolName,inputSetNames::[SymbolName],argsNames::[SymbolName],body::Expr}-- function definition