Yeah, that seems to be the best practice that's promoted as well. Another 
gotcha with this implementation is that since it's done via extending the 
channel protocol (specifically take!), it doesn't actually apply the 
functions effects unless someone is reading from the channel. This could be 
an issue if you want side-effects only from the map< call.

On Monday, April 7, 2014 11:36:21 AM UTC-4, James Reeves wrote:
>
> This looks like a bug to me. A lot of the internal core.async functions 
> rely on nil values indicating the channel is closed.
>
> - James
>
>
> On 7 April 2014 16:26, Alejandro Ciniglio <[email protected] <javascript:>
> > wrote:
>
>> Using core.async, I've understood the convention to be that if you take 
>> nil from a channel, that channel is closed. This seems to hold for most 
>> cases, but I've found a corner case when using map< that lets you pull nil 
>> from a channel that is not closed. 
>>
>> (def a (chan))
>> (def c (map< seq a))
>> (go (prn (<! c)))
>> (>!! a [])
>> ; => nil nil ;; [one nil is printed, one is returned]
>> (go (prn (<! c)))
>> (>!! a [1])
>> ; => nil (1)
>>
>> This can be chained as well (e.g. (map< identity (map<  seq a)) ), and 
>> nils just flow through. 
>>
>> From looking at the implementation, it's apparent that this happens 
>> because the function application of map happens when taking from the output 
>> channel so nil is not technically on the channel, (unless it flows through 
>> to another map).
>>
>> Is this a bug or is my mental model of nil => closed incorrect?
>>
>> Thanks,
>> Alejandro
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to [email protected]<javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> [email protected] <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 [email protected] <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 [email protected]
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to