+ go env (App fun (substExpr env (Var arg_id))) args }
+ -- Note [Take care]:
+ -- If completeNonRecX was to do a postInlineUnconditionally
+ -- (undoing the effect of introducing the let-binding), we'd find arg_id had
+ -- no binding; hence the substExpr. This happens if we see
+ -- C (D x `cast` g)
+ -- Then we start by making a variable a1, thus
+ -- let a1 = D x `cast` g in C a1
+ -- But then we deal with the rhs of a1, getting
+ -- let a2 = D x, a1 = a1 `cast` g in C a1
+ -- And now the preInlineUnconditionally kicks in, and we substitute for a1
+