if we implement Equal, must also implement Hash