#import "modules/std.sx"; add :: (a: s32, b: s32) -> s32 { a + b; } mul :: (a: s32, b: s32) -> s32 { a * b; } apply :: (f: (s32, s32) -> s32, x: s32, y: s32) -> s32 { f(x, y); } main :: () { // Store function in variable fp : (s32, s32) -> s32 = add; print("fp(3,4) = {}\n", fp(3, 4)); // Reassign to different function fp = mul; print("fp(3,4) = {}\n", fp(3, 4)); // Pass function pointer as argument print("apply(add,5,6) = {}\n", apply(add, 5, 6)); print("apply(mul,5,6) = {}\n", apply(mul, 5, 6)); } // ** stdout ** //fp(3,4) = 7 //fp(3,4) = 12 //apply(add,5,6) = 11 //apply(mul,5,6) = 30