fp.fac = (fp.func) -> { fp.retFunc = (fp.func, $n) -> { return parser.op($n < 2?1:$n * fp.func($n - 1)) } return fn.combAN(fp.retFunc, fp.func) } # Apply Y combinator fp.facY = fp.combY(fp.fac) # Use function fn.println(fp.facY(10))