(piResultTys f_ty [ty1, .., tyn]) gives the type of (f ty1 .. tyn)
where f :: f_ty
piResultTys is interesting because: 1.
f_ty may have more for-alls than there are args 2. Less
obviously, it may have fewer for-alls For case 2. think of:
piResultTys (forall a.a) [forall b.b, Int] This really can happen, but
only (I think) in situations involving undefined. For example:
undefined :: forall a. a Term: undefined
(forall b. b->b)
Int This term should have type (Int -> Int), but notice that
there are more type args than foralls in
undefineds type.