I don't see a way for a reducing function to make its return value depend on the result of another callback.
On Monday, September 22, 2014 9:45:15 PM UTC+2, Wilker wrote: > > I understand Leon, but all that only applies on Java world... The issue > here is because I depend on async stuff, in Java you always have options to > do it sync, you don't need any of those callbacks at all, this is a JS API > issue. So in my case I really need the async factor here, I can't avoid it. > > Given that, would be possible to make transducers async? I think the big > deal of transducers is exactly don't having to re-write map, filter, etc... > That's why I'm really trying to get then to work on this situation, unless > someone knows for sure that its not possible, than I can accept the > limitations and keep all my custom versions that can handle async > processing... > > Thanks. > > --- > Wilker Lúcio > http://about.me/wilkerlucio/bio > Woboinc Consultant > +55 81 82556600 > > On Mon, Sep 22, 2014 at 4:22 PM, Leon Grapenthin <grapent...@gmail.com > <javascript:>> wrote: > >> The steps of your transducer composition are depending on each other. >> They can only produce a result from an input if they process it >> synchronously. If you had <!! available and would use it as you have >> described, you would reenforce synchronous input processing: Once you would >> consume an item, the code would have the exact same blocking >> characteristics as if the functions were returning values instead of >> channels. You would have gained nothing for the cost of creating >> overhead. >> >> >> On Monday, September 22, 2014 1:53:52 AM UTC+2, Wilker wrote: >>> >>> Because it's Node-JS environment, and that can be the same for any async >>> Javascript, you never wanna call sync operations (like sync ajax) because >>> they block everything... >>> >>> I was noticing that is a non-issue at all in Java world, since you can >>> always read blocking into the predicate, for example: (filter (comp <!! >>> my-chan-pred)) >>> >>> But in Javascript that's not possible since it can't support read >>> blocking. >>> >>> --- >>> Wilker Lúcio >>> http://about.me/wilkerlucio/bio >>> Woboinc Consultant >>> +55 81 82556600 >>> >>> On Sun, Sep 21, 2014 at 8:50 PM, Leon Grapenthin <grapent...@gmail.com> >>> wrote: >>> >>>> Why would you want the the predicates and readdir to return channels? >>>> >>>> On Monday, September 22, 2014 12:14:27 AM UTC+2, Wilker wrote: >>>>> >>>>> Just an add, >>>>> >>>>> I was thinking if we could have something like a "deref" running >>>>> during the transducers, in order to enable value unwrapping (that way we >>>>> could handle channels/values in same fashion). I understand that is >>>>> complicated maybe because overhead, and also more tricky into JS world >>>>> were >>>>> you can't deref a channel into a sync fashion. >>>>> >>>>> But the point remains, there is way to seamlessly handle async and >>>>> sync operations using the same transducers? Or something like it. >>>>> >>>>> Best regards. >>>>> >>>>> --- >>>>> Wilker Lúcio >>>>> http://about.me/wilkerlucio/bio >>>>> Woboinc Consultant >>>>> +55 81 82556600 >>>>> >>>>> On Sun, Sep 21, 2014 at 7:01 PM, Wilker <wilke...@gmail.com> wrote: >>>>> >>>>>> Hi guys, >>>>>> >>>>>> I'm playing with transducers here, and trying out stuff just for fun, >>>>>> there is something that I'm kind stuck on how to approach. I understand >>>>>> the >>>>>> great abstraction that transducers provide over don't carrying about the >>>>>> input source type, but I'm struggling to deal with async operations into >>>>>> my >>>>>> pipeline. >>>>>> >>>>>> For example, I'm working with Node.JS async API's for file system >>>>>> operations, I want to stick with the async versions since I don't wanna >>>>>> block the event loop of Node. >>>>>> >>>>>> So, let's say I have a source with ["dir", "other"] and I wanna >>>>>> create an operation that will simple filter which paths exists, are >>>>>> directories, and then list the `ls` of each remaining entry. >>>>>> >>>>>> So, I first created "channel returning" functions for the Node >>>>>> operations, I'll not put the code here because I don't think it's really >>>>>> relevant here, just consider that I have them. >>>>>> >>>>>> So, my pipeline would start looking something like this: >>>>>> >>>>>> (comp (filter exists?) >>>>>> (filter is-dir?) >>>>>> (mapcat readdir)) >>>>>> >>>>>> Of course, this doesn't works... Because `exists?`, `is-dir?` and >>>>>> `readdir`, all of them return channels, so the filter would always pass >>>>>> since a channel is always a valid value... The same applies to mapcat, >>>>>> it >>>>>> would try to concat into a channel... >>>>>> >>>>>> This is making me notice some barrier to be able to compose async >>>>>> operations with regular operations. >>>>>> >>>>>> Maybe would be possible to "sign" somehow operations to make then run >>>>>> async? >>>>>> >>>>>> The only viable option that I've found is with pipeline-async, which >>>>>> accepts an async function, but that doesn't composes with the other >>>>>> operations (map, filter, drop-while...) >>>>>> >>>>>> Is there already a solution to that? Or maybe I'm just doing it wrong >>>>>> and there is a better way to handle those cases? >>>>>> >>>>>> I would love to know how you guys are handling those kind of >>>>>> situations. >>>>>> >>>>>> Thanks. >>>>>> >>>>>> --- >>>>>> Wilker Lúcio >>>>>> http://about.me/wilkerlucio/bio >>>>>> Woboinc Consultant >>>>>> +55 81 82556600 >>>>>> >>>>> >>>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To post to this group, send email to clo...@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+u...@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+u...@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 clo...@googlegroups.com >> <javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> 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+u...@googlegroups.com <javascript:>. >> 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.