I don't think you need two streams at all. Unless there's more code in 
between the two streams that you're not showing.

Would the following work:
(def -private-stream- (s/stream ...))
(def my-sink (s/sink-only -private-stream-)) 
(def my-source (s/source-only -private-stream-))

Or if you really want `-private-stream-` to be out of scope, then a fn to 
create the source and sink could be used. Something like

(defn create-sink-and-source []
  (let [private-stream (s/stream ...)]
    {:sink (s/sink-only private-stream)
     :source (s/source-only private-stream}))

(def sink-and-source (create-sink-and-source))
(def my-sink (:sink sink-and-source))
(def my-source (:source sink-and-source))

Since a stream is both a sink and a source, you can mask it with 
`sink-only` and `source-only` to get the appearance of having just a sink 
_and_ just a source. I would like to point out that having two streams does 
nothing different than having one other than the overhead and complexity of 
moving data between two streams. Unless, as I said earlier, you're doing 
something in between the two streams.
On Thursday, August 27, 2015 at 4:18:33 PM UTC-4 atamert...@gmail.com wrote:

>
>
> On Thu, Aug 27, 2015 at 10:51 PM, Zach Tellman <ztel...@gmail.com> wrote:
>
>> Hi Atamert,
>>
>>
> Hi Zach,
>  
>
>> For future reference, posting these questions to 
>> https://groups.google.com/forum/#!forum/aleph-lib will ensure I'll see 
>> them sooner.  
>>
>
> I've subscribed. Thanks.
>
>  
>
>>
>> The `source-only` method is just a way to make sure that the chance for 
>> confusion is minimized, it doesn't prevent the underlying object from being 
>> used normally.  As for your scenario, I'm not sure I completely 
>> understand.  In a standard stream, the flow of data is:
>>
>> [ sink -> source ]
>>
>> So if you `put!` something into the sink, you can `take!` it from the 
>> source.  If you use `source-only` and connect that to some other sink, then 
>> the flow of data will be
>>
>> [ sink -> source ] -> sink
>>
>> So the source is only connected to one sink, not two.  Maybe I'm 
>> misunderstanding you, though.
>>
>
> I have initially written it right. I was looking through the docs and the 
> source at the same time and I got confused. Then I replaced source with 
> sink and vice versa. So if you are misunderstanding, you are understanding. 
> :)
>
> Let me try again. If we have:
>
> (def my-sink (s/sink-only (s/stream ...))) 
> (def my-source (s/source-only (s/stream ...)))
> (s/connect my-source my-sink)   ;; BTW this got me confused, I thought 
> flow was like my-source -> my-sink
>
> After I have written the comment above, and playing with this code in the 
> REPL, I have realized the flow IS from source to sink.
>
> I think I am un-confused now, and it all makes sense. I have a producer 
> side and a consumer side. Instead of repeating a function call, I want to 
> connect these two components using a stream. I thought I'd need half a 
> stream here and half a stream there. But now I realize I need two whole 
> streams, connect them, put! on one side, take! on the other. I hope it 
> makes sense. Sorry for the noise.
>
>
>  
>
>>
>> Zach
>>
>> On Thursday, August 27, 2015 at 4:13:35 AM UTC-7, Atamert Ölçgen wrote:
>>>
>>> Hi,
>>>
>>> AFAIK the only way to create (just) a source (or sink) is:
>>>
>>> (def my-source (s/source-only (s/stream ...)))
>>>
>>> This results in creating a stream and then wrapping it with a 
>>> SourceProxy. We don't keep a reference to the stream and 
>>> the SourceProxy doesn't allow taking.
>>>
>>> But if I'm not missing something since SourceProxy keeps a reference of 
>>> the original stream, there is a sink nobody is using there.
>>>
>>> If I create a sink separately and connect my-source to it, now 
>>> my-source would be connected to two sinks.
>>>
>>> My questions are:
>>>
>>> 1. Is there another method for creating only sinks or sources?
>>> 2. Should the extra/unused source/sink I mentioned above cause concern?
>>>
>>> PS: I'm not talking about a scenario where we're creating thousands 
>>> streams and connecting them all like there's no tomorrow.
>>>
>>>
>>> -- 
>>> Kind Regards,
>>> Atamert Ölçgen
>>>
>>> ◻◼◻
>>> ◻◻◼
>>> ◼◼◼
>>>
>>> www.muhuk.com
>>>
>> -- 
>> 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.
>>
>
>
>
> -- 
> Kind Regards,
> Atamert Ölçgen
>
> ◻◼◻
> ◻◻◼
> ◼◼◼
>
> www.muhuk.com
>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/clojure/28725cbd-0f8b-4c46-acdc-f2f8621653f5n%40googlegroups.com.

Reply via email to