Why not just Hash[semantic_element ...]?