int -> int fix( int> -> int -> int f) { T -> int -> int g = int->int fun(T x) { f(int fun(int y) { x.f(x)(y); }); }; g (new Y(f = g)); } struct Y(T -> int -> int f) : T { } int -> int factorialor(int -> int factorial) { int fun(int x) { if(x == 0) { 1; } else { x * factorial(x - 1); }; }; } int main(int n) { fix(factorialor)(n); }