(module poly_apply (fn apply (type (forall (vars a b) (fn-type (params (fn-type (params a) (ret b)) a) (ret b)))) (params f x) (body (app f x))) (fn succ (type (fn-type (params (con Int)) (ret (con Int)))) (params n) (body (app + n 1))) (fn main (type (fn-type (params) (ret (con Unit)) (effects IO))) (params) (body (app print (app apply succ 41)))))