In Clojure I use threading macros often, but one thing that always bothers me is that the argument position is implicit (for most of the family of macros). It is ok while working on it, but once I leave the coding for a while and then look at the code, it's extremely confusing. I ended up always marking the inserted argument position with commas, which are treated as whitespaces in Clojure.
srfi-197 allows to use <> as the insertion points, and I can always use it even the argument position is the last position:
(chain (a b) (c d <>) (e f <>))
And I wonder if we gain anything by allowing <> in the last position to be omitted.
Sure it may shorten the code a bit. However, the spec is effectively the same as "show the argument position with <> except when it's the last position, in which case you can omit it." It looks somewhat an arbitrary and irregular rule.
Code is read far more times than written. Saving a few keystrokes trading off readability doesn't seem a good deal.
Is everyone comfortable with implicit argument? Certainly, when I see (cons "x"), I can see there's an implicit argument, since the fact that cons takes two arguments is engraved in my brain (the same circuit fires when I'm reading Haskell code).
But it isn't always necessary the case, e.g. (list 'a 'b)
Any opinions?