That's extremely valid. I like the idea of takes_file(_::create_new(p)?), while your NonZero example seems really yikes in the absence of some additional thing later that involves y and constrains the type further to NonZero.
On balance, we're probably better off limiting how much inference we do here.