Specter – Clojure API for immutable programming (2017)
nathanmarz.com
Specter – Clojure API for immutable programming (2017)
1–10 of 44 posts
Re: Specter – Clojure API for immutable programming (2017)
#2Re: Specter – Clojure API for immutable programming (2017)
#3Some production code:
(defn transform-tagged-values [x]
(sp/transform (sp/walker tr/tagged-value?) tagged-value->cljs x))
Give it a predicate for which values to transform, and a function to do the transformation. Couldn't be easier.Re: Specter – Clojure API for immutable programming (2017)
#4Meander was the last one I can remember:
Re: Specter – Clojure API for immutable programming (2017)
#5There's a lot of alternatives in this space Meander was the last one I can remember: https://www.youtube.com/watch?v=9fhnJpCgtUw
Re: Specter – Clojure API for immutable programming (2017)
#6Meander [1] is also wonderful. Its unification-based approach makes for nice expressions of intent. Its strategy-based approach to rewriting [2] is more flexible than most common walker libraries, too.
[0]: https://github.com/redplanetlabs/specter/wiki/Specter's-inli...
[1]: https://github.com/noprompt/meander
[2]: https://github.com/noprompt/meander/blob/epsilon/doc/strateg...
Re: Specter – Clojure API for immutable programming (2017)
#7also cf
Glom for Python: https://sedimental.org/glom_restructured_data.html
Hashdig in Ruby's standard library: https://ruby-doc.org/core-2.7.1/Hash.html#method-i-dig
Re: Specter – Clojure API for immutable programming (2017)
#8Re: Specter – Clojure API for immutable programming (2017)
#9Like SQL for nested maps in Clojureland. Neat. The DSL [ALL :a even?] does feel a tiny bit un-clojurey to me as well, maybe making it look like [:all :a even?] would make it clearer.
{:all {:a 2} :foo {:a 4}}
Maybe namespaced keys would fit that usecaseRe: Specter – Clojure API for immutable programming (2017)
#10I invented instar ( https://github.com/boxed/Instar ) which is quite similar to specter (imo a little bit nicer) because I also thought the built in API was weirdly clunky in these respects.