Implementing event streams

The event stream implementation, on the other hand, is the most complex in our framework. We'll tackle it gradually, implementing it and experimenting as we go.

First, let's look at our main constructor function, event-stream:

(defn event-stream 
  "Creates and returns a new event stream. You can optionally provide an existing 
  core.async channel as the source for the new stream" 
  ([] 
     (event-stream (chan))) 
  ([ch] 
     (let [multiple  (mult ch) 
           completed (atom false)] 
       (EventStream. ch multiple completed)))) 

The docstring should be sufficient to understand the public API. What might not be clear, however, is what all the constructor arguments mean. From left to right, the arguments to EventStream are as follows:

  • ch: This is ...

Get Hands-On Reactive Programming with Clojure - Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.