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
dataExpr=ControlExpr[Expr]-- result of last computation, sequence of instructions
|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{inputSetNames::[SymbolName],argsNames::[SymbolName],body::Expr}-- function definition