Yeah, I'm going to let it go, hopefully I'll find some way of handling it on future, for now keeping the extra versions is not that bad.
Thank you everyone. --- Wilker Lúcio http://about.me/wilkerlucio/bio Woboinc Consultant +55 81 82556600 On Mon, Sep 22, 2014 at 6:01 PM, Leon Grapenthin <grapenthinl...@gmail.com> wrote: > 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> >> 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 >>> 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 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. > -- 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.