I have corrected the problem I had last night, and now the refactoring will always try and place the pattern in the case expression. I think this is more suitable. Also this is strange and I can't work out why the type checker is doing this.

Suppose I have the function (without type information)

f (Con1 x) = 34

then the typechecker converts to something of the form...

f d9 (Con1 x) = 34

it puts an extra pattern in for some reason and it only does this if the function has no type signature and it returns an Int.