For Fn
{Mut
|Once
} specifically, it wouldn't be (stable[1]) breaking, because it's currently impossible to implement or otherwise name the trait(s) except through the Fn(Args...) -> Output
form. Adding the GAT would thus be compatible, so long as the existing Fn()
alias continues meaning Output
is independent from call(&self)
's '_
.
[1] of course, it'd be breaking for nightly-only implementers (but we don't care about that, because nightly opts out of stability) unless we added a rule that you can implement a GAT without the lifetime generic, and it just accepts and ignores that input lifetime. Underspecified, but I think possible, somewhat realistic given other lifetime inference rules, and potentially desirable if it allows us to reuse existing traits for the lending versions.