title: Forcing all implementations of a trait to override equals
body: <p>I have a trait for which I know that reference equality is never the correct implementation of <code>equals</code>. Implementations of the trait can be written by many users, and practice shows that sometimes they fail to override <code>equals</code>. Is there a way to require it?</p>
  
  <p>In practice implementations are usually case classes, which override <code>equals</code> automatically, and we can approach requiring <em>that</em> by having <code>Product</code> as the self-type of the trait, however, I'd like to see a solution which allows non-case classes overriding <code>equals</code> as well (EDIT: Using <code>scala.Equals</code> as the self-type is a closer approximation to what I want, since it's still implemented automatically by case classes, but can be usefully implemented by non-case classes and isn't a large burden on people writing implementations).</p>
  
  <p>One more approach I thought of while writing this question is to override <code>equals</code> in the trait to call an abstract method, but unfortunately, this doesn't work for case class implementations.</p>