Yeah it's quite rare in ruby to override Object's `hash`, `==`, and `eql?`, it's only necessary when object identity isn't good enough