Conversation
That requires making a 1-to-1 relationship between each `Smashable`-adopter and each `Value`-adopter Right. Value can't be directly Equatable and used as a dynamic type currently. You could put an "isEqual(Value)" method on Value to model heterogeneous equality. Implementing that so as to allow later additions to the set of Value-conformers would be challenging.