+ ; mutual recursion
+(test-types (typecheck '(let ([f (lambda (n) (if (= n 0)
+ 0
+ (+ 1 (g (- n 1)))))]
+ [g (lambda (m) (f m))])
+ (f 10)))
+ 'int)
+
+(test-types (typecheck '(let ([pow (lambda (p y)
+ (let ([go (lambda (n x)
+ (if (= n 0)
+ x
+ (go (- n 1) (* x y))))])
+ (go p 1)))])
+ (pow 4 2)))
+ 'int)
+