Their respective docstrings give a hint here:

Sequence – “returns a lazy sequence”.
Eduction – “returns a reducible/iterable …”.

(type (sequence identity [1 2 3])) => clojure.lang.LazySeq
(type (eduction identity [1 2 3])) => clojure.core.Eduction

If you look at that cheshire.generate/generate function -- 
https://github.com/dakrone/cheshire/blob/master/src/cheshire/generate.clj#L116-L152
 – you’ll see it is a large cond on the type of its argument and that it 
supports clojure.lang.ISeq (which clojure.lang.LazySeq implements) but does not 
support any of the types that clojure.core.Eduction has behind it.

If you wrap your eduction call in a seq call, I expect it will work:

(type (seq (eduction identity [1 2 3]))) => clojure.lang.LazySeq

Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

________________________________
From: clojure@googlegroups.com <clojure@googlegroups.com> on behalf of Jonathon 
McKitrick <jmckitr...@gmail.com>
Sent: Friday, December 22, 2017 6:32:54 AM
To: Clojure
Subject: Transducers eduction vs sequence

I have a `get-summary` function that builds stats and returns them as a web 
service. Under the hood, it calls quite a few map, group-by, filter, etc. 
functions.

I’m experimenting with transducers, and `sequence xform` does the trick most of 
the time. But I want to understand `eduction` use cases. In most cases, 
`eduction` seems to be a drop-in replacement. But in a few cases, I’m seeing 
this error:

JsonGenerationException Cannot JSON encode object of class: class 
clojure.core.Eduction: clojure.core.Eduction@31accd87  
cheshire.generate/generate (generate.clj:152)

So there’s something I’m missing about my understanding of `sequence` versus 
`eduction`. Can someone shine some light on it?

Thanks!

--
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<mailto:clojure+unsubscr...@googlegroups.com>.
For more options, visit https://groups.google.com/d/optout.

-- 
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