Shouldn't `isEqual:` also check whether they both have the same value for `optional`?