def derive_new_map(trie)
      if trie.equal?(@trie)
        return self
      elsif trie.empty?
        if @default
          return self.class.alloc(EmptyTrie, @default)
        else
          return self.class.empty
        end
      else
        return self.class.alloc(trie, @default)
      end
    end
def derive_new_map(trie)
      if trie.equal?(@trie)
        return self
      elsif trie.empty?
        if @default
          return self.class.alloc(EmptyTrie, @default)
        else
          return self.class.empty
        end
      else
        return self.class.alloc(trie, @default)
      end
    end
Return a new `Map` which is derived from this one, using a modified {Trie}.
 The new `Map` will retain the existing default block, if there is one.