<div dir="ltr"><div>Personally, I&#39;m fine with current state of things.</div><div><br></div><div>Firstly, I consider classes like a compatibility feature. They slightly fall out of Swift type system. One can almost entirely avoid them, except when interacting with ObjC. (They somehow code in Haskell, right?)</div><div><br></div><div>Secondly, when we interact with a struct (record), we expect it not to mutate itself by default.</div><div>On the other hand, classes are black boxes, they represent some entity with which we interact. It is natural for such entities to perform internal mutation during operation.</div><div><br></div><div>&gt; protocols with mutating methods should be constrained to applying to non-class types</div><div>All methods of classes are implicitly mutating, so if something, then protocols with non-mutating methods should be disallowed for classes.</div></div>