use "basic_models.g"; fun apply1 where { Regular } (fun(T,int)->T@ f, T x, int y) -> T@ { return f(x, y); } fun apply2(fun(T,int)->int@ f, T x, int y) -> int@ { return f(x, y); } fun apply3((fun(int,int)->int@) f, int x, int y) -> int@ { return f(x, y); } fun add(int x, int y) -> int@ { return x + y; } fun main() -> int@ { let x = apply1(add, 3, 1); let dda = add; let y = apply2(dda, 2, 2); let z = apply3(add, 4, 4); return x + y - z; }