Ensure that arity is accurate in back end
See Note [exprArity invariant] in CoreUtils. In code generated by Happy
I was seeing this after TidyPgm and CorePrep
f :: Any
f {arity 1} = id `cast` unsafe-co
So f claimed to have arity 1 (because exprArity looked inside), but
did not have any top-level lambdas (because its type is Any).
This triggered a slightly-obscure ASSERT failure in CoreToStg
This patch
- makes exprArity trim the arity if the type is not a function
- adds a stronger ASSERT in TidyPgm
It's not the only way to solve this problem (see Note [exprArity invariant])
but it's enough for now.