Reducers have a initialiser(0-arity) and and step(2-arity). Transducers add a 1-arity function which does not allow the function to curry properly. It is cool and quite mind-bending… but that’s not what I want in a function.
the best way I can describe it is that you’re threading the continuation for the rest of the pipeline through the 1-arity function. (map inc) is not (partial map inc). It’s a completely different beast altogether.
if you compare iterator code for the map equivalent, you can see that it is extremely straight forward and does not rely on the 1-arity threading mechanism I described. In fact, when compared to the clojure transducer implementation, the guava iterator java implementation are shorter and more succinct than Clojure’s.