Not for same entities: I want to have the ability to express different hashing for a concrete type and its existential type. For ex
protocol A: Hashable { //default impl here }
struct Beta: A, Hashable { //provide different hashing }
//now code that wants Beta uses its hashability,
//whilst code that expect A type, uses A's hashbility
//a bit simplified version of what I want, but correct
What do you mean by bags of syntax?
Depends on the case
Check this or this. It is true that semantic of the code might be covered from sight, but it can be mitigated with various assistance from IDE.