Hi Sam,

Transducers are a new feature, and best practices are still emerging.

Transducing/reducing is always non-lazy, so it's *less* risky to have side 
effects in a reduce compared with side effects in a lazy sequence.

Still, I would offer the same advice I give for lazy sequences. Keep your 
side-effects as separated as possible from the purely-functional 
computation that feeds them.

Don't put a side-effect in the middle of a chain of map/filter-like 
operations. Do all your map/filter/whatever with pure functions, then 
process the entire result non-lazily to do the side effects.

The "driver" for that process could be `doseq`, `run!`, `transduce`, or 
even `reduce`. `doseq` has overhead to allocate the sequence, which the 
others avoid.

–S

On Thursday, June 25, 2015 at 2:30:21 PM UTC-4, Sam Raker wrote:
>
> This seems bad, is this bad:
>
> (defn to-db
>   [conn]
>   (fn
>      ([val] (upload-to-my-db conn val))
>      ([_ val] (upload-to-my-db conn val)))
>
> (defn -main []
>   (transduce my-preprocessing-xf (to-db (get-db-conn)) seq-of-things-to-
> preprocess-and-upload))
>
> I ask only because
> 1) Plugging the side-effecting part into the transducer pipeline seems 
> cleaner and potentially more efficient than e.g. 
> (doseq [v (sequence my-preprocessing-xf sea-of-things)] (upload-to-my-db 
> conn v))
> which is what I was doing
> 2) The addition of `run!`[1] in 1.7 seems to perhaps implicitly condone 
> this kind of thing. There's very little out there about it, though, so I 
> could very well be wrong.
>
>
>
>
> [1] 
> http://conj.io/store/v1/org.clojure/clojure/1.7.0-alpha4/clj/clojure.core/run%21
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to