I know that protocols can be used to constrain a generic parameter type. And a protocol can be used as a variable's type, a placeholder which can hold any value of any conforming type. (And for a
var, different actual types at different times.) But a protocol with
associatedtype requirements cannot be used as a variable, only for a generic constraint. I understand the reason why is that types sharing a SoAT protocol have the same interface in shape, but not the same interface in the specific inner types used. Meanwhile, types sharing a non-SoAT protocol have the same interface in shape and inner types.
What other uses can you use a non-SoAT protocol type for? And other uses for SoAT protocol types?