type a : 1 -> integers type t : integer -> a type r : integer -> integer function foo : t function bar : r function entry : bar(a) := { 5 + bar(a - 1); return a * bar(a-1); } foo(c) := { [a: arg] arg := reserve arg(c); return arg; } entry(args) := { [a: b] b := foo(8); }