Functions
function isEqual(a, b) { // defining a function
return a == b;
}
assert(isEqual("a", "a")); // calling the function
assert(not isEqual("a", "b"));
assert(isEqual(1, 1)); // Can be called with any type
function isEqual2(a, b) {
a == b // return is optional!
}
assert(isEqual2("a", "a"));
function isEqual3(a: Integer, b: Integer) : Boolean {
a == b // explicitly typed function
}
assert(isEqual3(5, 5));
assert(isEqual3("a", "a")); // incompatible types
def f = function(a) { a * a }; // inline function
assert(f(2) == 4); // called like any other function
function forEach(seq : Integer[], f: function(:Integer)) { // declaration
for (i in seq)
f(i);
}
var sum = 0;
forEach([1, 2, 3], function(a: Integer) : Void { sum += a});
assert(sum == 6);

