The classic paper &quot;The Incremental Garbage Collection of Processes&quot; (<a href="http://citeseer.ist.psu.edu/baker77incremental.html">http://citeseer.ist.psu.edu/baker77incremental.html</a>) describes &quot;futures&quot; and how particularly garbage collecting them when their pending result is no longer referenced.&nbsp; I&#39;ve been playing with an implementation of futures in Concurrent Haskell (
<a href="http://haskell.org/haskellwiki/Reactive">http://haskell.org/haskellwiki/Reactive</a>), using MVars, and I&#39;m stumped about how to GC non-winning threads in a race between futures (&quot;parallel or&quot;).&nbsp; I&#39;m having winner kill loser, which seems to work fine, though is potentially dangerous 
w.r.t locked resources.&nbsp; Still, the elegance of a GC-based solution appeals to me.&nbsp; Has anyone explored process GC ideas for Concurrent Haskell (or STM)?<br><br>Futures are implemented using Concurrent Haskell&#39;s MVars.&nbsp; I first tried using STM and TVars, simply using orElse to implement mappend for futures.&nbsp; However, I didn&#39;t see how to avoid nesting &quot;atomically&quot;, which yielded a run-time error.&nbsp; If anyone has ideas about using STM &amp; TVars for futures, I&#39;d love to hear.
<br><br>Thanks,&nbsp; - Conal<br><br><br><br>