def deep_merge!(other, prefix = [], &block)
          merge!(other) do |key, lhs, rhs|
            key_path = prefix + [key]
            both_are_hashes = lhs.is_a?(Hash) && rhs.is_a?(Hash)
            next lhs.deep_merge!(rhs, key_path, &block) if both_are_hashes