This proposal is largely based on my previous proposal, which can be found here. It had a few problems though, which are fixed by this proposal.
It is unclear how to represent operators using interface methods. We considered syntaxes like +(T, T) T, but that is confusing and repetitive. Also, a minor point, but ==(T, T) bool does not correspond to the == operator,