Couldn't we use `SemanticComparer<T>` here instead?