(module test_mono_recursive_fn_bug (class Foo (param a) (method foo (type (fn-type (params a) (ret (con Int)))))) (instance (class Foo) (type (con Int)) (method foo (body (lam (params (typed x a)) (ret (con Int)) (body x))))) (fn loop (type (fn-type (params (con Int) (con Int)) (ret (con Int)))) (params acc i) (body (if (app eq i 0) acc (tail-app loop (app + acc i) (app - i 1))))) (fn main (type (fn-type (params) (ret (con Unit)) (effects IO))) (params) (body (app print (app loop 0 5)))))