Ah, I forgot that the type constructor appearing in the function arg pattern tells type inference what the type is so that overloading works better. I usually just define a type abbreviation and then explicitly type the function argument using that instead. I agree that in the absence of opaque signatures the possibility of confusion would be bad.