struct Rec { unRec: @fn(Rec) -> A } fn fix(f: @fn(@fn(A) -> B) -> @fn(A) -> B) -> @fn(A) -> B { let k: @fn(r: Rec<@fn(A) -> B>) -> @fn(A) -> B = |r| |x| f((r.unRec)(r))(x); k(Rec { unRec: k }) } fn main() { let fac = fix (|me| |x: int| if x == 0 { 1 } else { x * me(x - 1) } ); println(fmt!("%d", fac(5))); }