Since Error existentials have a single retainable pointer representation, we should consider making Error self-conforming. As a bonus, in Chris's implementation the extension Result where Self.Error == Error can be merged with extension Result where Self.Error : Error.