On Mon, Mar 10, 2014 at 06:20:15PM -0700, Alex Crichton wrote:
> I understand that, but I would expect the bounds to be invariant
> (but that's mainly just how I feel). It seems like if we want to
> accept any "subtype" bound we're going to get very surprised down
> the road when things look like they work but shouldn't.

I think the right way to think about this is that the trait defines
the guarantees the method can expect, and the impl defines the bounds
that the method requires (with respect to the return type, the
relationship is reversed, as is typical). Generally these are the same
but they do not have to be. This leaves the door open for (sometime
later) supporting refinement (e.g. #5236) and so forth.