explain merge() semantics