Data.Hashable can produce hashes differing little in their upper bits if only the last character of the string is changed. Because we were using the upper bits of the hash in shortHash, this could lead to avoidable hash collisions. This change includes minor simplification optimizations which surfaced this collision in the existing struct_ident_scope test.