<div class="gmail_quote">On Wed, Apr 4, 2012 at 4:48 AM, Paul Liu <span dir="ltr">&lt;<a href="mailto:ninegua@gmail.com">ninegua@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Is there any follow up on this?<br>
<br>
I was wondering what is the best way to sequence a number of sources<br>
together. Anybody gave a further thought on this?<br></blockquote><div><br></div><div>I believe sequence sources together can already be done by `Monoid` instance.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<br>
Regards,<br>
Paul Liu<br>
<div class="HOEnZb"><div class="h5"><br>
On Tue, Dec 27, 2011 at 3:45 PM, Aristid Breitkreuz<br>
&lt;<a href="mailto:aristidb@googlemail.com">aristidb@googlemail.com</a>&gt; wrote:<br>
&gt; Hi all,<br>
&gt;<br>
&gt; As you may have noticed, Michael Snoyman has been working on an<br>
&gt; alternative approach to I/O, called conduits. You can find it here:<br>
&gt;<br>
&gt; <a href="https://github.com/snoyberg/conduit" target="_blank">https://github.com/snoyberg/conduit</a><br>
&gt;<br>
&gt; When looking at the Source type (explained here:<br>
&gt; <a href="http://www.yesodweb.com/blog/2011/12/conduits" target="_blank">http://www.yesodweb.com/blog/2011/12/conduits</a>), I noticed that they<br>
&gt; seem to behave &quot;like lists&quot;, and naturally wondered if I could write a<br>
&gt; Monad instance for them. But first, let&#39;s have a brief look at the<br>
&gt; definition of Source:<br>
&gt;<br>
&gt; data SourceResult a = Open a | Closed<br>
&gt;<br>
&gt; data PreparedSource m a = PreparedSource<br>
&gt;     { sourcePull :: ResourceT m (SourceResult a)<br>
&gt;     , sourceClose :: ResourceT m ()<br>
&gt;     }<br>
&gt;<br>
&gt; newtype Source m a = Source { prepareSource :: ResourceT m<br>
&gt; (PreparedSource m a) }<br>
&gt;<br>
&gt; ResourceT deals with resource acquisition and releasing (making sure<br>
&gt; that all resources are released), and provides a an abstraction over<br>
&gt; IORef/STRef. For our purposes here, ResourceT is probably close enough<br>
&gt; to IO.<br>
&gt;<br>
&gt;<br>
&gt; So now the question again is, can we write a Monad instance for this?<br>
&gt; I have been able to write join (concatenate) and return (a source with<br>
&gt; a single non-repeated) element.<br>
&gt;<br>
&gt; <a href="https://gist.github.com/1525471" target="_blank">https://gist.github.com/1525471</a><br>
&gt;<br>
&gt; I _think_ it behaves properly like a Monad, but I&#39;m not quite sure,<br>
&gt; and neither was Michael. Greg Weber then suggested bringing the<br>
&gt; question to this forum. What made the question difficult for me is<br>
&gt; that this would be a stateful Monad transformer, so I&#39;m not quite sure<br>
&gt; how to test the Monad laws properly.<br>
&gt;<br>
&gt;<br>
&gt; There&#39;s a second part to this question: If Source turns out not to be<br>
&gt; a Monad, is it possibly a ZipList-like Applicative? And either way,<br>
&gt; which is more useful: The list-like or the ziplist-like instances (of<br>
&gt; Applicative/Monad)?<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Thank you,<br>
&gt;<br>
&gt; Aristid<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Haskell-Cafe mailing list<br>
&gt; <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br>
<br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
Regards,<br>
Paul Liu<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><a href="http://yi-programmer.com/" target="_blank">http://yi-programmer.com/</a><br>