<p dir="ltr">Control.Concurrent.MVar has an example implementation of a SkipChan, which is pretty close to what you want: <a href="https://hackage.haskell.org/package/base-4.8.2.0/docs/Control-Concurrent-MVar.html">https://hackage.haskell.org/package/base-4.8.2.0/docs/Control-Concurrent-MVar.html</a>.</p>
<p dir="ltr">I also have a package called KickChan that implements something similar; if a consumer gets too far behind the channel becomes stale and the consumer will need to reconnect. This can be useful  if e.g. the consumer gets an initial state and the channel only communicates updates.</p>
<br><div class="gmail_quote"><div dir="ltr">On 14:17, Thu, Jan 28, 2016 Noon Silk <<a href="mailto:noonslists@gmail.com">noonslists@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I think you should be able to do this with the `pipes` and `pipes-concurrency` libraries, in particular have a look at: <a href="http://haddock.stackage.org/lts-5.0/pipes-concurrency-2.0.5/Pipes-Concurrent.html#v:newest" target="_blank">http://haddock.stackage.org/lts-5.0/pipes-concurrency-2.0.5/Pipes-Concurrent.html#v:newest</a><div><br></div><div>--</div><div>Noon</div><div><br></div></div><div class="gmail_extra"></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jan 29, 2016 at 7:30 AM, Mark Fine <span dir="ltr"><<a href="mailto:mark.fine@gmail.com" target="_blank">mark.fine@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>We're currently using a TMChan to broadcast from a single producer thread to many consumer threads. This works well! However, we're seeing issues with a fast producer and/or a slow consumer, with the channel growing unbounded. Fortunately, our producer-consumer communication is time-sensitive and tolerant of loss: we're ok with the producer always writing at the expense of dropping communication to a slow consumer.</div><div><br></div><div><div>A TMBChan provides a bounded channel (but no means to dupe/broadcast) where a writer will block once the channel fills up. In our use case, we'd like to continue writing to the channel but dropping off the end of the channel. Clojure's core-async module has some related concepts, in particular the notion of a <a href="https://clojure.github.io/core.async/#clojure.core.async/sliding-buffer" target="_blank">sliding buffer</a> that drops the oldest elements once full. Has anyone encountered something similar in working with channels and/or have any solutions? Thanks!</div></div><span><font color="#888888"><div><br></div><div>Mark</div></font></span></div>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div></div><div class="gmail_extra">-- <br><div><div dir="ltr"><div><div dir="ltr">Noon Silk, ن<br><br><a href="https://silky.github.io/" target="_blank">https://silky.github.io/</a><br><div><br>"Every morning when I wake up, I experience an exquisite joy — the joy<br>of being this signature."<br></div></div></div></div></div>
</div>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div>