HN Hall of Fame Weekly email

Specter – Clojure API for immutable programming (2017)

nathanmarz.com Essays & writing Announcements Software engineering Candidate
Screenshot of nathanmarz.com captured 2026-07-20
Page preview · captured 2026-07-20

Resurfaced independently across 3 calendar years, with breakout response in 2 of them.

submissions
6
submitters
6
observed span
2017–2020
peak thread · 43 comments
152 pts
latest 20+ return · 2020-09-04
152 pts

Submission timeline

2007–2026

One slot for every year since HN launched. Height is that year's peak points; orange marks a 100+ point or 50+ comment breakout. Select a bar to open its strongest thread.

First comments on top threads

HN comment order

Specter is tremendously useful and rarely lets on a case where it can’t perform a transformation. For ensuring that you’re getting the most efficient form of a transformation [0] it’s incredible —- and it is somewhat data-oriented, allowing easy saving and reuse of navigators. Meander [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]…

tekacs·152-point thread·

As one can see in two other top-level comments in this thread, the choice of an all-caps DSL is off-putting. It would be more idiomatic to have a hiccup-like API, where data is passed - not code, not syntax. And the keywords should be namespaced, so meaning is self-documented (and one gets superior IDE support).

vemv·145-point thread·

This was the transformation that hooked me: (transform (subselect ALL :a even?) reverse [{:a 1} {:a 2 :b 1} {:a 4} {:a 5} {:a 6} {:a 8}]) ;; => [{:a 1} {:a 8 :b 1} {:a 6} {:a 5} {:a 4} {:a 2}]] I'm solid with Clojure, and I am not even sure how to begin expressing this transformation without Specter. Granted, it's not clear why you would want to do this in a real program. But I'm convinced about…

kyptin·10-point thread·

The first top-level comment from each of the four biggest threads, in HN’s own order. Excerpts are shortened; open a comment for full context.

Breakout years
2

100+ points or 50+ comments

Total points
321

reference only — not used in Hall rules or ranking

Total comments
81

reference only — not used in Hall rules or ranking

Every submission

DateTitle as submittedByPointsComments
2017-03-01Clojure's missing piecegreenonion101
2017-03-02Specter, Clojure's missing pieceyayitswei110
2017-03-06Clojure's Missing Piecebloat10
2017-03-11Specter 1.0: Clojure's missing piecepauldelany20
2018-12-01Clojure's missing piece (2017)First breakouttosh14543
2020-09-04Specter – Clojure API for immutable programming (2017)Best thread · Latest 20+ point returnamgreg15237