-- evaluation order def g := \x trace x >>> g; def f := \x \y if x = 0 then 9 else trace 1 >>> (f (x - 1) (y 0)); def h := \x trace 8 >>> trace x >>> x + x; def const := \x \y y >>> x; type list { nil : list; cons : Any -> list -> list; }; trace (const 0 (trace "!" >>> 1)) >>> trace (const 0 (trace "a" >>> cons 1 (trace "b" >>> trace "c" >>> cons 1 (trace "d" >>> nil)))) >>> trace ((\x \y \z x >>> trace "2" >>> x + y + (trace "3" >>> z)) (trace "1" >>> 1) 2 3) >>> trace (f 5 g) >>> trace 7 >>> h (trace 2 >>> 3)