MODULE TProcType; // Procedure types: alias, procedure-typed variable, assignment of a // procedure name, and indirect call. Both the named parameter form // (a, b : INTEGER) and the type-only shorthand (INTEGER) are used. // Exit 42. TYPE BinOp = PROCEDURE (a, b : INTEGER) : INTEGER; TYPE UnOp = PROCEDURE (INTEGER) : INTEGER; VAR ExitCode : INTEGER; VAR f : BinOp; VAR g : UnOp; PROCEDURE Add (a, b : INTEGER) : INTEGER; BEGIN RETURN a + b END Add; PROCEDURE Neg (x : INTEGER) : INTEGER; BEGIN RETURN -x END Neg; BEGIN f := Add; ExitCode := f(40, 2); // 42 g := Neg; ExitCode := ExitCode + g(-5) - 5 // 42 + 5 - 5 = 42 END TProcType.