diff --git a/pixie/stdlib.pxi b/pixie/stdlib.pxi index 7d16a0c6..614befd6 100644 --- a/pixie/stdlib.pxi +++ b/pixie/stdlib.pxi @@ -2717,3 +2717,11 @@ Calling this function on something that is not ISeqable returns a seq with that (if (satisfies? IComparable x) (-compare x y) (throw [::ComparisonError (str x " does not satisfy IComparable")]))) + +(defn vary-meta + {:doc "Returns x with meta data updated with the application of f and args to it. +ex: (vary-meta x assoc :foo 42)" + :signatures [[x f & args]] + :added "0.1"} + [x f & args] + (with-meta x (apply f (meta x) args))) diff --git a/tests/pixie/tests/test-stdlib.pxi b/tests/pixie/tests/test-stdlib.pxi index 8334d9e0..217784d1 100644 --- a/tests/pixie/tests/test-stdlib.pxi +++ b/tests/pixie/tests/test-stdlib.pxi @@ -691,3 +691,6 @@ (t/assert= m (map-entry :a 1)) (t/assert= m [:a 1]) (t/assert= m '(:a 1)))) + +(t/deftest test-vary-meta + (t/assert= 42 (-> {} (vary-meta assoc :foo 42) meta :foo)))