Good point, we can reference `SemanticCompater<T>` and also change the constructor signature to accept a `SemanticComparer<T>`.