Stefan Monnier writes: >> (macroexp-let2 nil key >> `(progn >> (map--dispatch ,map >> :list (setf (alist-get ,key ,map nil t) nil) >> :hash-table (remhash ,key ,map) >> :array (and (>= ,key 0) >> (<= ,key (seq-length ,map)) >> (aset ,map ,key nil))) >> ,map))) > > Note that this will make it pretty much impossible to use > cl-generic dispatch. Indeed, but I already have that issue. To use `cl-generic', map.el has to be basically rewritten from scratch. > A better option might be to provide a map-remove which works > functionally (i.e. doesn't modify its argument by side-effects) I'd love to have that, but what about performance issues with hash-tables? hash-tables aren't persistent collections, and having `map-remove', `map-add', etc. work functionally, the hash-table would have to be copied for each operation. Cheers, Nico