== test == fun test(b: Boolean): (Int) -> Int { if (b) { fun(n: Int) = n + 1 } else { fun(n: Int) = n - 1 } } --------------------- : Boolean NEW: magic[FAKE_INITIALIZER](b: Boolean) -> b : Boolean NEW: r(b) -> fun(n: Int) = n + 1 : * NEW: r(fun(n: Int) = n + 1) -> { fun(n: Int) = n + 1 } : * COPY fun(n: Int) = n - 1 : * NEW: r(fun(n: Int) = n - 1) -> { fun(n: Int) = n - 1 } : * COPY if (b) { fun(n: Int) = n + 1 } else { fun(n: Int) = n - 1 } : * NEW: merge(if (b) { fun(n: Int) = n + 1 } else { fun(n: Int) = n - 1 }|, ) -> { if (b) { fun(n: Int) = n + 1 } else { fun(n: Int) = n - 1 } } : * COPY ===================== == anonymous_0 == fun(n: Int) = n + 1 --------------------- : Int NEW: magic[FAKE_INITIALIZER](n: Int) -> n : Int NEW: r(n) -> 1 : Int NEW: r(1) -> n + 1 : Int NEW: call(n + 1, plus|, ) -> ===================== == anonymous_1 == fun(n: Int) = n - 1 --------------------- : Int NEW: magic[FAKE_INITIALIZER](n: Int) -> n : Int NEW: r(n) -> 1 : Int NEW: r(1) -> n - 1 : Int NEW: call(n - 1, minus|, ) -> =====================