Last active
September 4, 2023 22:16
-
-
Save paultopia/78ba6791d7eba48293da45d9d5d58c57 to your computer and use it in GitHub Desktop.
merge for clojure that doesn't overwrite existing values with nil values
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(require '[clojure.core.match :refer [match]]) | |
(defn discard-nils [a b] | |
(match [a b] | |
[_ nil] a | |
:else b)) | |
(def safe-merge (partial merge-with discard-nils)) | |
;; examples | |
(safe-merge {:a 1 :b 1} {:a 5 :b nil} {:a nil :b 3}) | |
;; => {:a 5, :b 3} | |
(merge {:a 1 :b 1} {:a 5 :b nil} {:a nil :b 3}) | |
;; => {:a nil, :b 3} | |
(safe-merge {:a 1 :b nil} {:a nil :b 4 :c 5 :d nil}) | |
;; => {:a 1, :b 4, :c 5, :d nil} | |
(merge {:a 1 :b nil} {:a nil :b 4 :c 5 :d nil}) | |
;; => {:a nil, :b 4, :c 5, :d nil} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
(def safe-merge (partial merge-with #(or %2 %1)))